BlockingQueue
BlockingQueue is like channel in go.
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class Main {
public static void main(String[] args) {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
// producer
new Thread(() -> {
try {
for (int i = 1; i <= 6; i++) {
queue.put(i);
System.out.println("< queued: " + i);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
// consumer
new Thread(() -> {
try {
while (true) {
Integer item = queue.take();
Thread.sleep(500);
System.out.println("> consumed: " + item);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
}
}
Expected output:
< queued: 1
< queued: 2
< queued: 3
< queued: 4
> consumed: 1
< queued: 5
> consumed: 2
< queued: 6
> consumed: 3
> consumed: 4
> consumed: 5
> consumed: 6