黑马程序员技术交流社区
标题:
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