Nad*_*eem 5 java concurrency multithreading thread-safety
我们使用在代码段周围使用同步块的代码,需要大量的wait和notifyAll()调用.我们正在尝试将这些转换为使用Java 5 Lock.lock()和Lock.unlock()方法.如何迁移此代码以删除所有wait和notifyAll调用.我不知道使用新的锁定功能相当于这些.
任何与示例的链接将不胜感激.
提前致谢
方程式,下面的代码需要转换为使用Lock.lock()和lock.unlock删除synchronized块的第一部分很简单,因为我只需要调用lock()方法.问题是可以为notifyAll()和wait方法做些什么.
synchronized( LOCK )
{
while( !Thread.interrupted() )
{
try
{
working = runRules();
if( !working )
LOCK.notifyAll();
LOCK.wait( working ? shortTimeout : longTimeout );
}
catch( final InterruptedException e )
{
Package.log.info( "Thread was interrupted. Exiting.", e );
return;
}
}
}
使用包Condition提供java.util.concurrent.locks的s:
final Object monitor = ...
...
synchronized (monitor) {
while (!condition) monitor.wait();
... do something ...
}
Run Code Online (Sandbox Code Playgroud)
变为:
final ReentrantLock lock = ...;
final Condition cvar = lock.newCondition();
...
lock.lock();
try {
while (!condition) cvar.await();
... do something ...
} finally {
lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
信令方面非常相似:
synchronized (monitor) {
... do something ...
monitor.notify();
}
Run Code Online (Sandbox Code Playgroud)
变为:
lock.lock();
try {
... do something ...
cvar.signalAll();
} finally {
lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |