Jam*_*sen 15 java locking synchronized reentrancy
在Java中,做ReentrantLock.lock()和ReetrantLock.unlock()使用相同的锁定机制synchronized()?
我的猜测是"不",但我希望是错的.
例:
想象一下,线程1和线程2都可以访问:
ReentrantLock lock = new ReentrantLock();
Run Code Online (Sandbox Code Playgroud)
线程1运行:
synchronized (lock) {
// blah
}
Run Code Online (Sandbox Code Playgroud)
线程2运行:
lock.lock();
try {
// blah
}
finally {
lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
假设线程1首先到达其部分,然后在线程1完成之前到达线程2:线程2将等待线程1离开synchronized()块,还是继续运行?
这两种机制是不同的.实施/绩效明智:
在某些情况下,显式锁可以更好地执行.如果你看一下我在Java 5下执行的锁定机制的比较,你会看到在那个特定的测试中(多个线程访问一个数组),在"不公平"模式下配置的显式锁类(黄色和青色三角形)允许更多吞吐量比普通同步(紫色箭头).
(我还应该说,在最新版本的Hotspot中,synchronized的性能已得到改善;在最新版本或其他情况下可能没有太多内容 - 这显然是在一个环境中的一个测试.)
功能明智的:
| 归档时间: |
|
| 查看次数: |
5523 次 |
| 最近记录: |