【发布时间】:2016-03-18 13:31:31
【问题描述】:
我需要确保特定的启动和停止代码在每个实例生命周期中只执行一次,并且不能“重新启动”实例。对于多个线程可能作用于实例的场景,以下代码是否足够?
public final class MyRunnable {
private final AtomicBoolean active = new AtomicBoolean(false);
private final AtomicBoolean closed = new AtomicBoolean(false);
public void start() {
if (closed.get()) {
throw new IllegalStateException("Already closed!");
}
if (active.get()) {
throw new IllegalStateException("Already running!");
}
active.set(true);
// My one-time start code.
// My runnable code.
}
public void stop() {
if (closed.get()) {
throw new IllegalStateException("Already stopped!");
}
if (!active.get()) {
throw new IllegalStateException("Stopping or already stopped!");
}
active.set(false);
// My one-time stop code.
closed.set(true);
}
}
【问题讨论】:
-
closed.set(false);我想你的意思是closed.set(true);
标签: java concurrency lifecycle atomic-values