有些时候,防止一段代码块正在执行的时候重复执行,或防止其并发执行,可采用以下手段进行限制:
手段一:
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();
}