检查 AtomicBoolean 并执行某些操作的最安全方法是什么?
What is the safest way to check AtomicBoolean and perform something?
有没有什么方法可以使这个操作像一个操作(一种自定义原子)?
if (!isShutdownStarted.get()
&& !QUEUE.contains(request.getUserEmail())) {
try {
QUEUE.add(request.getUserEmail());
}
//...
}
其他线程中的代码
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
PaymentClient.isShutdownStarted.set(true);
while (!PaymentClient.QUEUE.isEmpty());
}
您不能使用 AtomicBoolean
使另一个操作或操作序列成为原子操作。
如果你需要使一个本质上非原子的操作或序列成为原子的,你需要使用锁;例如一个原始的互斥量,一个 Lock
或类似的东西。
有没有什么方法可以使这个操作像一个操作(一种自定义原子)?
if (!isShutdownStarted.get()
&& !QUEUE.contains(request.getUserEmail())) {
try {
QUEUE.add(request.getUserEmail());
}
//...
}
其他线程中的代码
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
PaymentClient.isShutdownStarted.set(true);
while (!PaymentClient.QUEUE.isEmpty());
}
您不能使用 AtomicBoolean
使另一个操作或操作序列成为原子操作。
如果你需要使一个本质上非原子的操作或序列成为原子的,你需要使用锁;例如一个原始的互斥量,一个 Lock
或类似的东西。