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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 java冬冬 于 2013-5-11 19:25 编辑

在多线程中,使用同步代码块解决同步问题时synchronized(*)中需要指定一个同步的对象,而这个同步对象可以为任意的对象都行,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

3 个回复

倒序浏览

回帖奖励 +2

1.使用同一个对象,为了是JVM知道,这两个是上的是同一把锁,这多个线程是需要同步的。
2.任意对象都可以,你想:给门上锁,只要是锁,哪把锁都无所谓,只要上锁就好。

我的理解。{:soso_e113:}  如有不对,请指出。谢谢。。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
Synchronized可以理解为监视器:
  |-- 意思就是我找一个实体对象来监视一段代码,一个线程Threa-0来了,进入这段代码后(还没有执行完),在这个时候Thread-1也来了,那么我这个对象一看,Thread-0还没有执行完,那么我就不让Thread-1进来。Thread-1就进行等待。
|--- 然后还有其他情况:(假如只有这两个线程)Thread-1在进行等待的过程中,Thread-0执行完了。Thread-1正准备进入这段同步代码块,Thread-0又进去了。。这个对象(一直都是这一个对象)一看,我已经有一个线程在操作了,于是还不烫Thread-1进来



希望你可以明白
回复 使用道具 举报
  楼上正解  现在假如有1,2两个线程同时执行(减obj的操作) 一个obj对象(500的值) ,如果不同步,可能造成的结果就是 1线程在执行到这个obj对象时被2线程抢到执行权,那么造成的结果就是这个obj对象可能会为负值,但是本身这个obj对象是不能为负值的,所以这个时候就需要一把锁,这个锁的功能就是1线程在执行这个obj对象的时候不能让2线程执行,让他在外面等着,因为对象可以是任意的所以锁也可以是任意的对象 但是 必须要是同一把锁才行  , 不想敲代码了  希望可以帮到楼主  呵呵  个人理解 不对还请见谅
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马