A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周一川 中级黑马   /  2013-3-21 20:40  /  1283 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

synchronized同步代码块和synchronized方法有什么区别

点评

如果你的问题已经得到解决。请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-21 21:49

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

4 个回复

正序浏览
同步代码块:
synchronized(对象)  
{
      需要同步的代码;
}

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


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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
其实真要找这两个方式的区别是在应用,synchronized方法一旦应用,那么整个方法都同步了,这种方式范围较大,synchronized代码块可以有选择的只是同步部分代码,所有在实际应用的时候要视情况,尽量在满足需求情况下,减少同步代码,可以提高程序的效率和更加健壮。其实1.5以后大家都用lock了 ,所以这两个相比lock灵活性和效率都要差一些。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
同步代码块。
synchronized(对象)//对象(也就是锁)是任意的
{

      需要被同步的代码

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

同步函数用的锁是this。



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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
锁不一样啊:
同步代码快锁:对象
静态同步函数锁:类名。class
同步函数锁:this
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马