synchronized同步语句块

1、synchronize同步语句块的好处
synchronized可以处理长时间的任务,避免直接加在方法上面所消耗的时间。只需要在所需要同步的地方加上同步的语句块就可以实现了
例1、synchronized加在方法上面

这样会导致多个线程执行的,都需要等待前面的线程执行完才可以进行执行
例2、使用同步语句块synchronized(this)进行处理
多个线程执行,最终所消耗的时间就大概是3秒,而打印时间的时候并不会出现变量不同步,里面需要定义私有变量用于接收防护的数据,因为私有变量是线程所具有的,不存在数据的多线程问题
2、synchronized(this)代码块是锁定当前对象的

synchronized同步方法
1)对其他synchronized同步方法或synchronized(this)同步代码块调用呈阻塞状态
2)同一时间只有一个线程可以执行synchronized同步方法中的代码
synchronized(this)同步代码块
1)对其他synchronized同步方法或synchronized(this)同步代码块调用呈阻塞状态
2)同一时间只有一个线程可以执行synchronized(this)同步代码块中的代码
synchronized(非this对象x)
1)在多个线程持有"对象监视器"为同一对象的前提下,同一时间只有一个线程可以执行synchronized(非this对象x)同步代码块中的代码
2)当持有"对象监视器"为同一对象的前提下,同一时间只有一个线程可以执行synchronized(非this对象x)同步代码块中的代码
静态同步synchronized方法
这个是Class锁,所有调用静态方法的对象都会呈现出同步的效果。而没有加在静态方法的的synchronized的方法,是对象的锁,这个锁和Class锁不一样,故可以与静态的synchronized方法实现异步执行效果
synchronized(class)同步代码块和静态同步synchronized方法效果相同

使用String对象作为同步代码块的"对象监视器"的时候,需要注意常量池的特征,防止对通过对象加锁。
String a = "a";
String b = "a";
System.out.print(a == b);
这个运行的结果是:true
故对对象加锁时,表示是同一个锁






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值