【多线程7-1】JAVA容器的发展历程
容器在物理层面分为两类,内存连续和内存不连续的容器内存连续的主要有数组、ArrayList、Set内存不连续的主要有HashMap,LinkedListJAVA最原始的数组有两个:Hashtable和
容器在物理层面分为两类,内存连续和内存不连续的容器内存连续的主要有数组、ArrayList、Set内存不连续的主要有HashMap,LinkedListJAVA最原始的数组有两个:Hashtable和
ReentrantLock可以有公平锁和非公平锁的不同实现,只要在构造它的时候传入不同的布尔值,继续跟进下源码我们就能发现,关键在于实例化内部变量sync的方式不同,如下所示publicReentra
一、AQS是构建同步组件的基础AbstractQueuedSynchronizer,简称AQS,为构建不同的同步组件(重入锁,读写锁,CountDownLatch等)提供了可扩展的基础框架,如下图所示
一、ThreadLocal的使用正常的情况下,person对象是这两个线程共有的,即使用同一个对象,因此当一个线程修改person的name时,另一个线程的name也会改变。publicclassTh
变量句柄(VarHandle)是对于一个变量的强类型引用,或者是一组参数化定义的变量族,包括了静态字段、非静态字段、数组元素等,VarHandle支持不同访问模型下对于变量的访问,包括简单的read/
第一个:实现一个容器,提供两个方法,add,size。写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束第二个:写一个固定容量同步容器,拥有put
ReentrantLockReentrantLock与sync的区别ReentrantLock的底层是CAS,sync是锁升级的trylocklockInterruptibly公平和非公平Reentr
什么是JMM JMM即为JAVA内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程
1.用户态和内核态内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被
volatile关键字,使一个变量在多个线程间可见AB线程都用到一个变量,java默认是A线程中保留一份copy,这样如果B线程修改了该变量,则A线程未必知道使用volatile关键字,会让所有线程都