1.synchronized关键字:
每个Java对象都有一个内置锁,添加这个关键字后内置锁就会保护这个对象,所以在调用对象方法前需要先获得锁,否则会进入阻塞状态。
2.volatile:
为变量的访问提供了免锁机制,调用对象的时候相当于告诉虚拟机这个变量可能会被修改,然后每次调用的时候会重新计算,而不是从寄存器直接读取。它的原理就是每次要线程要访问volatile修饰的变量时都是从内存中读取,而不是存缓存当中读取,因此每个线程访问到的变量值都是一样的。
3.ReentrantLock可重入锁:
可重入锁内部维护一个计数器,对于同一个线程调用lock方法,计数器+1,调用unlock方法,计数器-1。与synchronized具有相同的基本行为,在此基础上做了扩展。如ReemtrantLock可以用tryLock()设置超时.
4.Semaphore信号量:
Semaphore信号量被用于控制特定资源在同一个时间被访问的个数。类似连接池的概念,保证资源可以被合理的使用。
5.局部变量(ThreadLocal):
使用ThreadLocal管理变量,使用该变量的线程相当于都会获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意改变副本的值而不会影响其他线程。
Java实现同步常用的几种方式总结
最新推荐文章于 2023-10-26 18:05:39 发布