Jon*_*Jon 1 java locking synchronized
我一直在利用Java的synchronized块来使代码线程的一部分安全.我正在将数据结构移植到通常可以使用synchronized块的java ,但我并不总是知道如何以典型的Java方式使用它们.
以下是一个场景的示例:
myMethod (Bool useLock)
{
if (useLock)
{
//locks the following section of code until unlocked.
lockObject.lock();
}
//do more stuff....
if (useLock)
{
//unlocks exclusive control of code.
lockObject.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在Java中完成相同的操作?在这段代码中,有时我想要锁定,有时我不想,但我想要聪明一点,而不必编写相同代码的两个版本.除了使用synchronized块之外,还有其他方法可以锁定Java 吗?
你可以使用Lock对象,特别是ReentrantLock应该做的工作.http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html
或者你仍然可以解决synchronized块的问题.您问题的代码如下所示:
myMethod (Bool useLock) {
if (useLock) {
synchronized (this) {
criticalSection();
}
} else {
criticalSection();
}
}
criticalSection() {
//do more stuff....
}
Run Code Online (Sandbox Code Playgroud)
或者,如果要保证类的不同实例之间的互斥,则应使用其他监视器对象this.例如TheClassName.class,该类的其他显式定义的静态变量.
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |