java_queue
coding
java queue with thread
package com.example.jtool;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
public class ThreatQueueTest {
private static final BlockingQueue<Object> queue = new LinkedBlockingQueue<>();
private static final ExecutorService executor = Executors.newFixedThreadPool(10);
private static volatile int count = 0;
public static synchronized void increment() {
count++;
}
public static synchronized int getCount() {
return count;
}
private static final AtomicBoolean done = new AtomicBoolean(false);
public static void main(String[] args) throws InterruptedException {
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 100; i++) {
queue.put(i);
}
done.set(true);
System.out.println("Produced all items");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
producer.start();
for (int i = 1; i <= 10; i++) {
executor.submit(() -> {
try {
while (!done.get() || !queue.isEmpty()) {
Object item = queue.take();
System.out.println(Thread.currentThread().getName() + "Consumed: " + item);
}
System.out.println("Consumed all items");
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 保持中断状态
}
});
}
producer.join();
executor.shutdown();
while (!executor.isTerminated()){
System.out.println("waiting");
Thread.sleep(100);
}
System.out.println("finish");
}
}
评论列表