解决方案 »
- Java 编程求助 学兄学姐好 初学者特来求助 请指导的好心人帮助下
- 如何能让这段代码提高效率,解决掉,高分送上!急!急!急!高手帮帮忙!
- java对象的初始化问题,很有意思
- 求助:java 初学者 菜鸟类问题
- JDK5关于对集合范型声明的判断问题,狂人乱入
- 大家帮小弟看一段代码吧!真的不知道哪里有毛病!谢谢
- NPE异常求教
- 对于java 中多态的想不懂的地方,求指教
- 终于鼓起勇气认真学习JAVA了,先散点分混个脸熟,各位帮忙捧捧场吧~~~
- 我刚刚开始学习Java,请各位高手指点捷径,推荐几个学习Java的网站。谢谢。
- 优化 RegExp 分数倾囊而出!结贴率100%
- 请各位大侠帮帮看看这个程序那里错了,谢谢!!
不管有没有返回,甚至在while(true)当中调用wait都会释放锁而且阻塞当前线程
锁的释放不是看return的
这是绝对错误的
很多人对锁的理解都有偏差
只有对象上才有监视器=monitor=锁public synchronized void put(){}
public synchronized int get(){}
public void other(){}线程t1进入put或get的前提是获得当前对象(也就是调用这些方法的对象主体)上的锁
t1未释放锁,t2当然不能执行put/get
但t1释放了锁,t2参与竞争并获得锁之后,就可以执行put/get中的内容synchronized 不是锁对象也不是锁方法,正确解读是:进入这个区块必须获得锁
再看一种情况
t1进入put期间,只能说等待put调用主体(所谓的当前对象)的锁的所有线程会因为等待锁而阻塞
这个期间,任意线程,而且是任意多个线程都可以随意调用other方法清楚了吧