有些時候,防止一段代碼塊正在執行的時候重複執行,或防止其併發執行,可採用以下手段進行限制:
手段一:
private volatile AtomicBoolean working = new AtomicBoolean(false);
void doSomeThing() {
if (working.getAndSet(true)) return;
try {
//doSomeThings();
} catch (Exception e) {
} finally {
working.getAndSet(false);
}
}
boolean isDoSomeThing() {
return working.get();
}
手段二:
private ReentrantLock lock = new ReentrantLock();
void doSomeThing() {
if (!lock.tryLock()) return;
try {
//doSomeThings();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
boolean isDoSomeThing() {
return lock.isLocked();
}