class Producer implements Runnable {
private final BlockingQueue<String> queue;
Producer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
// Thread.sleep(10);
queue.put(produce());
// System.out.println("已生產:" + (queue.size() - queue.remainingCapacity()));
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
String produce() {
String msg = DateTime.now().toString();
// System.out.println(msg);
return msg;
}
}
class Consumer implements Runnable {
private final BlockingQueue<String> queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while (true) {
Thread.sleep(10);
consume(queue.take());
System.out.println("已消費:" + queue.remainingCapacity());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(String x) {
// System.err.println(x);
}
}
class Setup {
public static void main(String[] args) throws InterruptedException {
BlockingQueue q = new ArrayBlockingQueue<String>(1000);
Producer p = new Producer(q);
new Thread(p).start();
// int size = 8;
// ExecutorService pool = Executors.newFixedThreadPool(size);
// for (int i = 0; i < size; i++) {
// pool.submit(new Consumer(q));
// }
// pool.awaitTermination(5, TimeUnit.SECONDS);
Consumer c1 = new Consumer(q);
// Consumer c2 = new Consumer(q);
new Thread(c1).start();
// new Thread(c2).start();
}
}
高併發-生產消費模型(阻塞隊列)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.