多线程同步的五种方法
为什么要线程同步?
当多个线程同时访问一个变量或对象时,如果这些线程既有读又有写操作时,就会导致变量值或对象的状态出现混乱。
1)synchronized关键字修饰的方法
2)同步代码块:既有synchronized修饰的语句块,语句块会自动加上锁
3)使用特殊变量volatile实现线程同步
volatile关键字为域变量的访问提供了一种免锁机制
使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
因此每次使用该域就要重新计算,而不是使用寄存器的值
volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
4)使用重入锁实现线程同步(ReentrantLock)
5)使用局部变量实现线程同步,使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,每一个线程都可以随意修改自己的变量副本,而不会对其他线程修改。读写分开,采用空间换时间的方法