黑马程序员技术交流社区

标题: synchronized同步 [打印本页]

作者: 周一川    时间: 2013-3-21 20:40
标题: synchronized同步
synchronized同步代码块和synchronized方法有什么区别
作者: HM汪磊    时间: 2013-3-21 20:46
锁不一样啊:
同步代码快锁:对象
静态同步函数锁:类名。class
同步函数锁:this
作者: HM刘博    时间: 2013-3-21 20:53
同步代码块。
synchronized(对象)//对象(也就是锁)是任意的
{

      需要被同步的代码

}
其中对象就如同锁,持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去.

同步函数用的锁是this。



在使用同步时的前提条件:
1,必须要有两个或者两个以上的线程。
2,必须是多个线程使用同一个锁。保证了同步中只能有一个线程在运行。


作者: 我自信我很牛    时间: 2013-3-21 20:57
其实真要找这两个方式的区别是在应用,synchronized方法一旦应用,那么整个方法都同步了,这种方式范围较大,synchronized代码块可以有选择的只是同步部分代码,所有在实际应用的时候要视情况,尽量在满足需求情况下,减少同步代码,可以提高程序的效率和更加健壮。其实1.5以后大家都用lock了 ,所以这两个相比lock灵活性和效率都要差一些。
作者: 花伟昌    时间: 2013-3-21 22:16
同步代码块:
synchronized(对象)  
{
      需要同步的代码;
}

同步函数:
public synchronized void 函数名()
{
  需要同步的代码;
}


静态同步函数:
public static synchronized void 函数名()
{
  
  需要同步的代码; 
}
同步代码块与同步函数以及静态同步函数的区别:
同步代码块的锁:任意唯一的对象;同步函数的锁:this;静态同步函数的锁:对象引用.getClass()(此方法非静态方法)或类名.class.
注意:同步代码块的锁,其实并不必须是对象,也可以是this,  类名.class 前提是要保证唯一性。同样可以实现同步。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2