黑马程序员技术交流社区

标题: JAVA多线程同步问题 [打印本页]

作者: 沈浩    时间: 2013-4-8 23:54
标题: JAVA多线程同步问题
synchronized(obj)  中的OBJ到底是什么东西啊?为什么随便一个东西都可以当做锁呢?完成锁定的原理?
作者: 王杰123    时间: 2013-4-9 00:07
本帖最后由 王杰123 于 2013-4-9 00:08 编辑

黑马之星王杰说出我的理解咱们共同进步,我认为是这样的 Object obj = new Object();  Object是根类,是所有对象的祖宗。所以随便一个对象就可以。锁的原理就是 一把锁有个开关,当线程进去就锁住,线程执行完就开锁,接着让下个线程进去执行。
作者: 余善航    时间: 2013-4-9 00:07
Object  obj=new Object();
  obj 是一个对象,  还有 不是随便什么都可以当做锁的
synchronized(obj)     这的锁只能是一个对象,也可以是一个类的字节码

作者: 刘林虎    时间: 2013-4-9 00:39
你可以直接用synchronized来修饰一个方法,如:public void synchronized printXX(){
........
}
这样,只在一个线和进个方法,那么此 “类”(方法所在的类) 就会被"上锁",其它线程不能访问。直到这个线程释放资源为止。
还可以将要实现同步的代码写到一个synchronized块里面,如:synchronized(obj){
......
}
注意,此处的obj是一个对象,你可以Object obj = new Object(); 也可以用this来代替,表示当前对象!
作者: 王大斌    时间: 2013-4-9 00:53
其实是一个对象的两种状态
建议使用lock  jdk1.5新特效
作者: 黄玉昆    时间: 2013-4-9 08:01
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者: 沈浩    时间: 2013-4-9 13:12
明白啦   小弟谢谢各位回答
作者: 蓝色骨头    时间: 2013-4-9 21:55
本帖最后由 蓝色骨头 于 2013-4-9 21:56 编辑

1 obj就是任意一个对象

2 在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的
为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁
监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的那个特别的房间叫做"获得监视器",占据房间叫做"持有监视器",离开房间叫做"释放监视器",离开建筑叫做"退出监视器".   

监视器:monitor
锁:lock(JVM里只有一种独占方式的lock)
进入监视器:entermonitor
离开/释放监视器:leavemonitor
(entermonitor和leavemonitor是JVM的指令)
拥有者:owner
在JVM里,monitor就是实现lock的方式。
entermonitor就是获得某个对象的lock(owner是当前线程)
leavemonitor就是释放某个对象的lock

锁涉及到原子操作,比如两个线程都在获取一个锁,只能有一个得到锁,这在计算机里面只能是一条指令(单独一条的指令不能被中断)




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