Java实现同步常用的几种方式总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值