java實現生產者與消費者
package concurrent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by geekgao on 16-3-4.
*/
public class ProducerAndConsumer2 {
public static void main(String[] args) {
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(5);
//一個生產者和兩個消費者
new Thread(new Producer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
}
}
class Producer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Producer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
try {
//生產20個產品
for (int i = 0;i < 20;i++) {
//當隊列滿了,put會自己阻塞住
blockingQueue.put(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Consumer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
//一直從隊列中取產品來消費
while(true) {
try {
//隊列爲空時take會阻塞住
System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by geekgao on 16-3-4.
*/
public class ProducerAndConsumer2 {
public static void main(String[] args) {
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(5);
//一個生產者和兩個消費者
new Thread(new Producer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
}
}
class Producer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Producer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
try {
//生產20個產品
for (int i = 0;i < 20;i++) {
//當隊列滿了,put會自己阻塞住
blockingQueue.put(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Consumer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
//一直從隊列中取產品來消費
while(true) {
try {
//隊列爲空時take會阻塞住
System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.