平台: Windows7 32bit
JDK版本: 1.5.0_22,1.8.0_121
实测结果为:
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired
和书中给的例子不一样,从结果上看是main线程中Thread.yield()方法,并没有给后台线程执行机会,没有获得竞争锁
将Thread.yield()方法替换为TimeUnit.MILLISECONDS.sleep(1);后即可实现预期效果
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired
tryLock(): false
tryLock(2, TimeUnit.SECONDS): false
本文通过实测Java中ReentrantLock的tryLock方法在不同条件下的表现,发现Thread.yield()无法有效让出CPU给其他线程获取锁,而使用TimeUnit.MILLISECONDS.sleep(1)则能实现预期的线程间锁的竞争。
170万+

被折叠的 条评论
为什么被折叠?



