synchronized 的简单总结

比如有一个Class MyClass

MyClass A = new MyClass();
MyClass B = new MyClass();
实例化了两个对象A和B

1.修饰方法,同步方法:

MyClass类中有如下方法:

private synchronized void say(){}

若多个线程中,某一个线程正在执行A.say()时,另一个线程也执行到了A.say(),则第二个线程将会阻塞在这里,只有等当前线程将同步方法执行完成后才可以继续执行,但是B可以随时调用B.say(),与B毫无关系。

注意:当一个类中有多个被synchronized 修饰的方法时,只要有一个同步方法在执行,其他被synchronized修饰的同步方法也不允许被其他线程执行。

个人理解:对方法加锁,即为对象加锁,上面的例子中,对A加锁,那个线程得到对象A的对象锁就可以进行相关操作。

2.同步块:

Object o = new Object();
synchronized (o){
//
}

多个线程都要对o进行操作,哪个线程拿到对象锁,就可进行相应操作。

若没有准确的对象时,请定义private byte[] lock = new byte[0];  这样比new 一个Object还要经济。

3.synchronized(MyClass.class)对类加锁,所有的对象将用同一把锁。

4.synchronized修饰static方法时:static方法是属于类的,等同于3。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值