package dev.elaine.concurrency;

import java.time.Duration;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

public final class BackpressureSample {
    private BackpressureSample() {
    }

    public static boolean publish(ArrayBlockingQueue<String> queue, String event, Duration timeout)
            throws InterruptedException {
        return queue.offer(event, timeout.toMillis(), TimeUnit.MILLISECONDS);
    }

    public static void main(String[] args) throws InterruptedException {
        ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(1);
        System.out.println("第一个事件=" + publish(queue, "event-1", Duration.ofMillis(50)));
        System.out.println("队列已满时第二个事件=" + publish(queue, "event-2", Duration.ofMillis(50)));
        System.out.println("消费=" + queue.take());
    }
}
