摘要:
输出结果:main start t1 -> main wait() -> t1 call notify() -> main continue 其实调用t1.start(),t1为就绪状态,只是main方法中,t1被main线程锁住了,t1.wait()的时候,让当前线程等待,其实是让main线程等待 阅读全文
摘要:
在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。不同线程对同步锁的访问是互斥的。也就是说,某时间点,对象的同步锁只能 阅读全文
摘要:
最近复习了一些多线程方面的基础知识,做一下总结,多以自己的理解来文字叙述,如果有漏点或者理解错的地方,欢迎各位大佬多多指出; ps:线程分为用户线程和守护线程,当程序中的所有的用户线程都执行完了之后,JVM就退出运行了,下面所讲的都是用户线程为例,我们一般创建一个新线程对象,默认都是用户线程,当然, 阅读全文
摘要:
很精彩的一次内部分享,介绍了大部分的GC算法理论知识,JVM博大精深,本篇文章只是结合本次内部分享总结的一些理论知识,如果有大佬有疑问,欢迎留言指出! Concurrent:并发,程序一边运行一边做GC Parallel:并行,一块区域,一个人做清扫,需要100s,但是把区域分成两块,用两个人扫,时 阅读全文
摘要:
明天老王要给我们讲JVM的知识,提前发了一个小Demo给我们看,代码如下: 运行上述代码,结果毫无疑问,电脑瞬间开始狂躁起来,过了十几秒,然后G了 基于JDK1.8运行的,估计老版本会崩的更快。。。 如果不计算内存,这个HashMap一共要插入4000*4000*4个对象,但是其实只有4个是不重复的 阅读全文
摘要:
本文旨在两个线程交替运行,不多哔哔直接看代码吧 该实现的原理也非常简单,定义一个对象,因为一个对象有且只有一个锁,所以让两个线程循环让此对象解锁->加锁,从而达到线程交替运行的目的; 个人觉得此方法还不够好,后续总结了再继续补充,还望看到的大佬们多指点指点! 阅读全文
摘要:
刚刚跟几个好朋友喝完小酒回家,简单大概复习一下ArrayList的扩容原理,由于头有点小晕,就只大概说一下扩容的原理哈; 首先ArrayList实现了List接口,继承了AbstractList,大家都知道底层是由数组实现的,但是我们都知道数组是不会增的,那么ArrayList是如何自增扩容的呢? 阅读全文
摘要:
我们都知道HashTable是线程安全的类,因为使用了Synchronized来锁整张Hash表来实现线程安全,让线程独占; ConcurrentHashMap的锁分离技术就是用多个锁来控制对Hash表的不同部分进行修改,因为我可能只需要对一小块部分进行操作,而如果锁整张表开销太大了,其内部实现就是 阅读全文
摘要:
HashMap的数据结构:数组+链表+红黑树;Java7中的HashMap只由数组+链表构成;Java8引入了红黑树,提高了HashMap的性能;借鉴一张图来说明,原文:https://www.jianshu.com/p/8324a34577a0 下面简单说一下存储过程: 1.接受传入的参数,通过k 阅读全文
摘要:
fail-fast机制即为快速失败机制,个人认为是一种防护措施,在集合结构发生改变的时候,使尽全力抛出ConcurrentModificationException,所以该机制大部分用途都是用来检测Bug的; 下面的代码可以引发fail-fast fail-fast原理 每个集合都会实现可遍历的接口 阅读全文