高并发的解决方案
volatile、synchronized、Lock、AtomicInteger
Volatile
volatile是一种稍弱的同步机制,在访问volatile变量时不会执行加锁操作,也就不会执行线程阻塞。他实现的是变量的可见性与一致性,但是他的原子性是保证不了。读取Volatile可以使用Unsafe.getObjectVolatile()获取,保证一致性。
synchronized(悲观锁)
锁的对象
public synchronized void method()
synchronized(this)
//零长度的byte数组对象创建起来将比任何对象都经济
byte[] lock = new byte[0]
synchronized(lock)
public synchronized static void method()
synchronized(Foo.class)
Foo.class和 P1.getClass()用于作同步锁还不相同
Lock(独占锁)
分析一下synchronized(隐式锁)的缺点:
1、占有synchronized锁的线程只有执行完该代码块,才能释放对锁的占有;
2、其他线程尝试获取synchronized锁,会一直尝试,无法知道结果,无法中断;
3、读写操作的时候,读与读之间不会互斥,synchronized锁无法实现;
Lock的Api: