三种方式实现计数器
1、简介说明
这篇博客主要记录下Java在多线程情况下,集中线程安全的计数器的一个实现。主要使用了三种不同的方式实现。
- synchronized方式,排它锁、独占锁、非公平锁,悲观锁
- Lock方式,公平锁,非公平锁,悲观锁
- CAS自旋锁,乐观锁,效率最高
代码:
/**
* 线程安全问题
* 计数器
*/
public class Counters {
/**
* 利用synchronized关键字控制方法的原子性
* 排它锁、独占锁、非公平锁
*/
class Counter1 implements Runnable {
private int count;
public synchronized void doCount() {
count++;
}
@Override
public void run() {
doCount();
}
}
/**
* 利用Lock类控制方法的原子性
* 公平锁
*/
class Counter2 implements Runnable {
private int count;
private Lock lock = new ReentrantLock(true);
public void doCount() {
try {
lock.lock();
count++;
} finally {