使用 synchronized关键字

可以使用 synchronized关键字同步方法或者代码块。

wait和notify

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
notify():唤醒一个处于等待状态的线程。
Allnotity():唤醒所有处入等待状态的线程。

volatile

使用重入锁实现线程同步

ReentrantLock() : 创建一个ReentrantLock实例
lock() : 获得锁
unlock() : 释放锁

使用局部变量 ThreadLocal 来实现线程同步

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。