黑马程序员技术交流社区
标题:
解决同步问题时遇到的问题,送金币求解答!!!!!!...
[打印本页]
作者:
java冬冬
时间:
2013-5-11 17:16
标题:
解决同步问题时遇到的问题,送金币求解答!!!!!!...
本帖最后由 java冬冬 于 2013-5-11 19:25 编辑
在多线程中,使用同步代码块解决同步问题时synchronized(*)中需要指定一个同步的对象,而这个同步对象可以为任意的对象都行,这是为什么呢?
作者:
胡帅冰
时间:
2013-5-11 18:03
1.使用同一个对象,为了是JVM知道,这两个是上的是同一把锁,这多个线程是需要同步的。
2.任意对象都可以,你想:给门上锁,只要是锁,哪把锁都无所谓,只要上锁就好。
我的理解。{:soso_e113:} 如有不对,请指出。谢谢。。
作者:
Super_Class
时间:
2013-5-11 18:46
Synchronized可以理解为监视器:
|-- 意思就是我找一个实体对象来监视一段代码,一个线程Threa-0来了,进入这段代码后(还没有执行完),在这个时候Thread-1也来了,那么我这个对象一看,Thread-0还没有执行完,那么我就不让Thread-1进来。Thread-1就进行等待。
|--- 然后还有其他情况:(假如只有这两个线程)Thread-1在进行等待的过程中,Thread-0执行完了。Thread-1正准备进入这段同步代码块,Thread-0又进去了。。这个对象(一直都是这一个对象)一看,我已经有一个线程在操作了,于是还不烫Thread-1进来
希望你可以明白
作者:
花开花落总相似
时间:
2013-5-11 23:02
楼上正解 现在假如有1,2两个线程同时执行(减obj的操作) 一个obj对象(500的值) ,如果不同步,可能造成的结果就是 1线程在执行到这个obj对象时被2线程抢到执行权,那么造成的结果就是这个obj对象可能会为负值,但是本身这个obj对象是不能为负值的,所以这个时候就需要一把锁,这个锁的功能就是1线程在执行这个obj对象的时候不能让2线程执行,让他在外面等着,因为对象可以是任意的所以锁也可以是任意的对象 但是 必须要是同一把锁才行 , 不想敲代码了 希望可以帮到楼主 呵呵 个人理解 不对还请见谅
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2