ArthurDn ArthurDn - 4 months ago 21
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.