Java 提供了 AtomicBoolean,AtomicInteger,AtomicLong类,并实现了原子操作方法,如getAndIncrement(),getAndAdd(), getAndDecrement()等,在多线程的情况下,实现线程同步,与synchronized相比,效率更高,原因就是在竞争激烈的情况下,synchronized可能升级为重量级锁,使用操作系统申请资源。
举个简单使用的栗子:
public class AtomicTest { private AtomicInteger count = new AtomicInteger(0); public synchronized void add() { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(count.incrementAndGet()); } public static void main(String[] args) { AtomicTest test = new AtomicTest(); for (int i=0; i<500; i++) { new Thread(() -> test.add(),i+"add").start(); } } }
另外 JDK 的 concurrent.atomic 包下还提供了 LongAdder 类,其内部使用了分段锁,多线程并且线程数很大的情况下,效率会比 AtomicLong 更高。