diff options
Diffstat (limited to 'src/main/java/bench/LogWorker.java')
| -rw-r--r-- | src/main/java/bench/LogWorker.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/main/java/bench/LogWorker.java b/src/main/java/bench/LogWorker.java new file mode 100644 index 0000000..5a9edfc --- /dev/null +++ b/src/main/java/bench/LogWorker.java @@ -0,0 +1,51 @@ +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(); + } + } + } +} |
