Java中的同步方法

Java中的同步方法

一、Synchronized

Synchronized是JAVA中的关键字,是语言层面的互斥锁。它可以修饰以下对象:

  1. 修饰代码块,被修饰的代码块称为同步语句块,其作用范围即大括号{}括起来的代码,作用的对象是调用这个代码块的对象。保证最多只有一个线程能够允许该代码块。
  2. 修饰一个方法,被称为同步方法,作用范围为整个方法,作用的对象是调用这个代码块的对象。
  3. 修饰一个类,作用范围是整个类。作用的对象是该类所有实例。

二、ReentrantLock

ReentrantLock是API层面的互斥同步锁(悲观锁),该使用方法表现为各个线程抢占锁的形式。按照公平与否可以分为公平锁、非公平锁。

公平锁表现为谁等待的时间长,谁就先获取锁,顾名思义非公平锁则是一个随机获取过程,谁运气好,CPU时间寻到哪个线程哪个线程就能够获取锁。

最后都得释放锁。要注意造成死锁的情况。

三、原子类(CAS)

特点:高性能、(较于互斥同步锁)
缺点:只能够同步一个值。

  1. 关键字:Volaitile.作用保证变量的内存可见性 、禁止指令重排序。关于内存可见性在JAVA中的含义为:由于共享变量储存于主内存中,子线程中的本地变量所改变之后,无法及时更新到主内存从而出现线程使用共享变量的值时,该值不是最新的。使用Volatile关键字或者加锁既可以解决可见性问题。(注:为什么加锁后就保证了变量的内存可见性了? 因为当一个线程进入 synchronizer 代码块后,线程获取到锁,会清空本地内存,然后从主内存中拷贝共享变量的最新值到本地内存作为副本,执行代码,又将修改后的副本值刷新到主内存中,最后线程释放锁。
  2. 在编译器中,有时候会对于代码的一些先后顺序所进行改变。使用Volaitile关键字后则,禁止指令重排序。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值