重入锁是什么意思,锁红米note3降级 免解锁有什么好处

2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。经常看到网上的人说,可重入锁一词,但是总是没怎么了解,到底什么是可重入锁,一直是一个模糊的概念,下面来大致总结一下。 可重入锁:指的是同一个线程多次试图获取它所占有的锁,请求会成功。当释放锁的时候,直到重入次数清零,锁才释放完毕。 再之前的我的博客:java synchronized关键字的用法--对象锁和类锁 http://my.oschina.net/u/1540325/blog/682950 里面最后我贴了一个程序: public class MultiLock {public synchronized void f1(int count, String threadName) { if (count-- > 0) { Print.print(threadName + ":f1() calling f2() with count " + count); f2(count, threadName); }}public synchronized void f2(int count, String threadName) { if (count-- > 0) { Print.print(threadName + ":f2() calling f1() with count " + count); f1(count, threadName); }}public static void main(String[] args) throws Exception { final MultiLock multiLock = new MultiLock(); new Thread() { public void run() {String name = Thread.currentThread().getName();multiLock.f1(10, name); } }.start(); new Thread() { public void run() {String name = Thread.currentThread().getName();multiLock.f2(10, name); } }.start();}}输出结果如下:Thread-1:f2() calling f1() with count 9Thread-1:f1() calling f2() with count 8Thread-1:f2() calling f1() with count 7Thread-1:f1() calling f2() with count 6Thread-1:f2() calling f1() with count 5Thread-1:f1() calling f2() with count 4Thread-1:f2() calling f1() with count 3Thread-1:f1() calling f2() with count 2Thread-1:f2() calling f1() with count 1Thread-1:f1() calling f2() with count 0Thread-0:f1() calling f2() with count 9Thread-0:f2() calling f1() with count 8Thread-0:f1() calling f2() with count 7Thread-0:f2() calling f1() with count 6Thread-0:f1() calling f2() with count 5Thread-0:f2() calling f1() with count 4Thread-0:f1() calling f2() with count 3Thread-0:f2() calling f1() with count 2Thread-0:f1() calling f2() with count 1Thread-0:f2() calling f1() with count 0 当时就觉得奇怪,在f1()里面调用了synchronized的f2(),当时只知道是可以,不知道具体原因,现在明白了,因为synchronized是可重入的锁,所以同一个对象的synchronized的方法调用另外一个synchronized方法是不需要再次获取锁的。 synchronized和lock都是可重入的锁,可以防止死锁,相对于可重入的锁有一种自旋锁,后面再做研究。
最新教程周点击榜
微信扫一扫

我要回帖

更多关于 大麦盒子降级有啥好处 的文章

 

随机推荐