Java锁类型,当另一个线程正在执行时取消执行
我所知道的java并发的唯一工具是synchronized,也就是说,如果两个线程调用同一个方法,那么一个线程将在执行之前等待另一个线程完成 然而,对于我的用例,如果另一个线程正在执行代码,我希望第二个线程放弃调用。比如:Java锁类型,当另一个线程正在执行时取消执行,java,android,multithreading,concurrency,Java,Android,Multithreading,Concurrency,我所知道的java并发的唯一工具是synchronized,也就是说,如果两个线程调用同一个方法,那么一个线程将在执行之前等待另一个线程完成 然而,对于我的用例,如果另一个线程正在执行代码,我希望第二个线程放弃调用。比如: boolean isInUse = false; public void doWorkIfNotBusy() { if (isInUse) { return; } else { isInUse = true; // do work i
boolean isInUse = false;
public void doWorkIfNotBusy() {
if (isInUse) {
return;
} else {
isInUse = true;
// do work
isInUse = false;
}
}
代码有错误。必须有一种简单但正确的方法来实现这一点。您的代码不正确,因为非易失性变量是从多个线程访问的,而无需任何额外的同步(有关Java内存模型的详细信息,请参阅)。您可以使用
Lock
及其tryLock
方法来实现所需的行为:
Lock lock = new ReentrantLock();
public void doWorkIfNotBusy() {
if (lock.tryLock()) {
try {
// do work
} finally {
lock.unlock();
}
}
}
如果成功获取锁,它将执行该操作,然后释放锁。否则,它会立即返回。您可以在此处阅读更多信息: