ArthurDn ArthurDn - 16 days ago 5
Java Question

What is the safest way to check AtomicBoolean and perform something?

Are any ways to make this operations like one operatinon (kind of custom atomic)?

if (!isShutdownStarted.get()
&& !QUEUE.contains(request.getUserEmail())) {
try {
QUEUE.add(request.getUserEmail());
}
//...
}


Code in other thread

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
PaymentClient.isShutdownStarted.set(true);
while (!PaymentClient.QUEUE.isEmpty());
}

Answer

You cannot use an AtomicBoolean to make another operation or sequence of operations atomic.

If you need to make an intrinsically non-atomic operation or sequence atomic, you need to use locking; e.g. a primitive mutex, a Lock or something equivalent.

Comments