随笔分类 - 多线程
摘要:含义 cas: compare and swap 比较和交换,如果期望值和当前值相等,那么则设置为新值,否则不做任何操作。 原理 cas操作保证了共享变量的原子性,主要是通过unsafe类。Unsafe是CAS的核心类。因为Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不
阅读全文
摘要:scheduleAtFixedRate 该⽅法在 initialDelay 时⻓后第⼀次执⾏任务,以后每隔 period 时⻓,再次执⾏任务。注意,period是从任务开始执⾏算起的。开始执⾏任务后,定时器每隔period时⻓检查该任务是否完成,如果完成则再次启动任务,否则等该任务结束后才再次启动任
阅读全文
摘要:类 作用 Semaphore 限制线程数量 Exchanger 两个线程交换数据 CountDownLatch 递减屏障,线程等待直到计数器减为0时开始工作 CyclicBarrier 循环屏障,等屏障的线程数达到初始化值时,执行自定义的任务 Phaser 增强的CyclicBarrier Coun
阅读全文
摘要:CopyOnWrite容器即写时复制的容器,当我们往⼀个容器中添加元素的时候,不直接往容器中添加,⽽是将当前容器进⾏copy,复制出来⼀个新的容器,然后向新容器中添加我们需要的元素,最后将原容器的引⽤指向新容器,这个过程中是使用ReentrantLock加锁了的。这样做的好处在于,我们可以在并发的场
阅读全文
摘要:ConcurrentHashMap1.8之前提供了⼀种粒度更细的加锁机制来实现在多线程下更⾼的性 能,这种机制叫分段锁(Lock Striping)。 提供的优点是:在并发环境下将实现更⾼的吞吐量,⽽在单线程环境下只损失⾮常 ⼩的性能。 可以这样理解分段锁,就是将数据分段,对每⼀段数据分配⼀把锁。当
阅读全文
摘要:AQS:AbstractQueuedSynchronizer 抽象队列同步器 抽象:抽象类,只实现⼀些主要逻辑 定义一些默认的模板方法,有些⽅法由⼦类实现; 队列:使⽤先进先出(FIFO)队列存储数据; 同步:实现了同步的功能。 核心思想:被请求的共享资源空闲时,首先获得共享资源锁的线程被设置为工作
阅读全文
摘要:1.可重入锁和不可重入锁 可以对临界区资源重复加锁,如synchronized、ReentrantLock 2.公平锁和非公平锁 FIFO,如果对⼀个锁来说,先对锁获取请求的线程⼀定会先被满⾜,后对锁获取请求的线程后被满⾜,那这个锁就是公平的。反之,那就是不公平的。ReentranLock支持公平锁
阅读全文