一: 基于锁的解决方案:
这是一种基于锁的同步方式,也是一种阻塞的线程间同步方式。无论是信号量(Semaphore)、重入锁(ReentrantLock)、内部锁(synchronized)总是避免不了相互等待,从而阻塞当前线程。为了避免这种问题,非阻塞的同步方式就被提出了。
二: 非阻塞的同步/无锁:
1. 最简单的以ThreadLocal为代表,每个线程拥有各自独立的变量副本,因此并行计算时,无需相互等待。
2. 基于比较交换(Compare And Swap)CAS算法的无锁并发控制。
3. 基于java.util.concurrent.atomic包中的原子类。
4. 利用一些开源无锁的open框架:如 Amino ( http://www.oschina.net/p/amino ),它实现了很多无锁的数据结构和一些任务调度。