线程学习02

synchronized

用法:
  a) synchronized aMethod() {}     
  b) bMethod() { synchronized( this ) {} }
  c) cMethod( Object object ) { synchronized( object ) {} }
  d) synchronized static dStaticMethod {}
  e) eStaticMethod { synchronized( 类.class ) {} }

1、synchronized 关键字的作用域有对象和类两种
   -- a、b、c 锁的范围是对象;d、e 锁的范围范围是类


2、每个对象都包含了唯一的一把锁(也叫作“监视器”);每个类也有唯一的一把锁。
   -- a、b 锁在当前对象上;d、e 锁在类上;c 锁在object对象上


3、a、b 效果相同;d、e 效果相同
   -- e 不能用类实例.getClass(),因为用classInstance.getClass()达不到锁这个Class的目的
      (注意 A.class == a.getClass)


4、c 的最好实现如下,只需3条操作码
     private byte[] lock = new byte[0]
     synchronized(lock) { //… }


烂七八糟:


synchronized aMethod() { }
       1、获得当前对象锁。防止多个线程同时访问这个对象的 aMethod 方法。
       2、一个对象只能有一个锁。
       3、如果对象有多个synchronized方法,访问了其中的一个synchronized方法,其它线程不能再访问这个对象的任意synchronized方法。
       4、同类对象的不同实例的 synchronized 方法是不相干扰的。


synchronized static aStaticMethod{}
1、获得当前类的锁。防止多个线程同时访问这个类的 aStaticMethod 方法。
        2、对类的所有对象实例都起作用,一个类只有一个锁。
        3、P1.getClass() 不能当类的锁


synchronized关键字是不能继承的


synchronized关键字取得的锁都是对象,不是把一段代码或函数当作锁


实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。


synchronized 可作用于instance变量、对象引用、static函数 和class literals(类名称字面常量)身上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值