package bench; import org.apache.logging.log4j.Logger; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; public class LogWorker implements Runnable { private final Logger logger; private final String message; private final CountDownLatch startLatch; private final AtomicBoolean running; private final AtomicLong eventCounter; private final AtomicLong targetEvents; private final BenchConfig.Mode mode; public LogWorker(Logger logger, String message, CountDownLatch startLatch, AtomicBoolean running, AtomicLong eventCounter, AtomicLong targetEvents, BenchConfig.Mode mode) { this.logger = logger; this.message = message; this.startLatch = startLatch; this.running = running; this.eventCounter = eventCounter; this.targetEvents = targetEvents; this.mode = mode; } @Override public void run() { try { startLatch.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } if (mode == BenchConfig.Mode.DURATION) { while (running.get()) { logger.info(message); eventCounter.incrementAndGet(); } } else { while (running.get() && eventCounter.get() < targetEvents.get()) { logger.info(message); eventCounter.incrementAndGet(); } } } }