producer-consumer package com.huidev.concurrency.ThreadPoolExecutor.ProducerConsumer;import java.util.concurrent.BlockingQueue;/** * Created by hui_stone on 2017/4/22 0022. */public class Producer implements Runnable { private final Blockin
package com.huidev.concurrency.ThreadPoolExecutor.ProducerConsumer;
import java.util.concurrent.BlockingQueue;
/**
* Created by hui_stone on 2017/4/22 0022.
*/
public class Producer implements Runnable {
private final BlockingQueue
sharedQueue;
private int threadNo;
public Producer(BlockingQueue
sharedQueue,int threadNo) { this.threadNo = threadNo; this.sharedQueue = sharedQueue; } @Override public void run() { for(int i=1; i<= 5; i++){ try { int number = i+(10*threadNo); System.out.println("Produced:" + number + ":by thread:"+ threadNo); sharedQueue.put(number); } catch (Exception err) { err.printStackTrace(); } } } } public class Consumer implements Runnable { private final BlockingQueue
sharedQueue; private int threadNo; public Consumer (BlockingQueue
sharedQueue,int threadNo) { this.sharedQueue = sharedQueue; this.threadNo = threadNo; } @Override public void run() { // while(true){ while(!Thread.currentThread().isInterrupted()) { try { int num = sharedQueue.take(); System.out.println("Consumed: " + num + ":by thread:" + threadNo); } catch (Exception err) { err.printStackTrace(); } } } } public class Main { public static void main(String[] args) { BlockingQueue
shardingQueue = new LinkedBlockingDeque
(); ExecutorService pes = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue
()); ExecutorService ces = new ThreadPoolExecutor(2, 4, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue
()); pes.execute(new Producer(shardingQueue,1)); ces.execute(new Consumer(shardingQueue,1)); ces.execute(new Consumer(shardingQueue,2)); pes.shutdown(); ces.shutdown(); } }
