HF_Cherish

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考两篇文章:

http://www.cnblogs.com/benshan/p/3551987.html

http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html

synchronized总结:

  1. synchronized 可以修饰:方法、代码块
  2. synchronized 获得的锁有两种:对象锁、类锁
  3. 同一时间只有一个线程可以访问某个锁控制的 所有 同步函数/块。
  4. 一旦一个线程获得锁后,仅当同步块执行完之后,才会释放锁(即使使用notify()主动释放锁,也不会立即释放,而是等同步块内的代码执行完之后才释放。当然wait()可以阻塞自己,从而释放对象锁)
  5. 非同步块/函数内的代码不受锁控制,允许多个线程同时访问。

进一步解释:

  1. 类锁:对用static修饰的类方法加锁。因为static修饰,也就是类方法,不需要实例化,可以直接通过类名调用。这种锁就是指这个类的所有类方法,同一时间只能有一个线程访问。
  2. 对象锁:没有用static修饰的,加上的锁都是对象锁。即对该类实例(对象)的所有同步方法,同一时间只有一个线程访问。
  3. 方法是通过对象或者类调用。通过类调用的即用static修饰的类方法。因此一旦获得了某个对象锁/类锁,那么所有被该锁锁上的同步块/函数,同一时间都只有一个线程能访问。其中synchronized(this)获得的也是当前对象的对象锁。

 

posted on 2015-09-10 17:16  HF_Cherish  阅读(123)  评论(0编辑  收藏  举报