并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier
并发编程 05—— CompletionService : Executor 和 BlockingQueue
并发编程 09—— 任务取消 之 关闭 ExecutorService
并发编程 11—— 任务取消与关闭 之 shutdownNow 的局限性
并发编程 12—— 线程池的使用 之 配置ThreadPoolExecutor 和 饱和策略
并发编程 19—— AbstractQueuedSynchronizer 深入分析
概述
第1部分 锁的劣势
第2部分
参考
第1部分 锁的劣势
java传统上是使用锁来实现线程间的同步。每一个object都有一个内部锁(intrinsic lock),关键字synchronized实现了锁的互斥。方法Object.wait主动的放弃锁,而方法Object.notify(All)则用来唤醒waiting中的线程。使用synchronized确保线程同步的正确性,但是也容易造成线程的阻塞。
volatile变量与锁相比是更轻量级的同步机制,但仅仅能保证内存的可见性,而不能用于原子化的操作。++i 看起来是原子的,而实际上却是取当前值,自增加一,然后回写更新。
时间: 2024-10-12 08:08:30