标签:style blog java color os art
1 package pinx.thread; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 6 public class ProducerConsumer { 7 8 Storage storage=null; 9 Query query=null; 10 public ProducerConsumer(int max){ 11 storage=new Storage(max); 12 query=new Query(); 13 } 14 15 public void start(){ 16 Producter producter=new Producter(); 17 Consumer consumer=new Consumer(); 18 Thread thread1=new Thread(producter); 19 20 Thread thread2=new Thread(consumer); 21 Thread thread3=new Thread(consumer); 22 Thread thread4=new Thread(consumer); 23 24 thread1.start(); 25 thread2.start(); 26 thread3.start(); 27 thread4.start(); 28 } 29 30 /** 31 * @param args 32 */ 33 public static void main(String[] args) { 34 ProducerConsumer pc=new ProducerConsumer(20); 35 pc.start(); 36 } 37 38 class Product { 39 private int id; 40 41 public Product(int id) { 42 this.id = id; 43 } 44 45 public String toString() { 46 return "Product " + this.id; 47 } 48 } 49 50 class Query{ 51 public Query(){} 52 public synchronized int get(){ 53 return -1; 54 } 55 } 56 57 class Storage { 58 Queue<Product> queue = null; 59 int max = 0; 60 61 public Storage(int max) { 62 this.max = max; 63 this.queue = new LinkedList<Product>(); 64 } 65 66 public synchronized void push(Product product) { 67 while (this.max == this.queue.size()) { 68 try { 69 this.wait(); 70 } catch (InterruptedException e) { 71 e.printStackTrace(); 72 } 73 } 74 this.queue.offer(product); 75 System.out.println("Producter has generated a product :" 76 + product.toString()); 77 this.notifyAll(); 78 } 79 80 public synchronized Product pop() { 81 while (this.queue.isEmpty()) { 82 try { 83 this.wait(); 84 } catch (InterruptedException e) { 85 e.printStackTrace(); 86 } 87 } 88 Product product = this.queue.poll(); 89 System.out.println("Consumer has consumed a product :" 90 + product.toString()+" ~~~"); 91 return product; 92 } 93 } 94 95 class Consumer implements Runnable { 96 97 public void run() { 98 while(true){ 99 System.out.println(String.format("Producter get the query value : %d", query.get())); 100 storage.pop(); 101 try { 102 Thread.sleep((int)(Math.random()*1000)); 103 } catch (InterruptedException e) { 104 e.printStackTrace(); 105 } 106 } 107 } 108 } 109 110 class Producter implements Runnable { 111 112 public void run() { 113 int index=0; 114 while(true){ 115 System.out.println(String.format("Producter get the query value : %d~~~~~~~~~~~~~~~~~~~", query.get())); 116 storage.push(new Product(++index)); 117 try { 118 Thread.sleep((int)(Math.random()*1000)); 119 } catch (InterruptedException e) { 120 e.printStackTrace(); 121 } 122 } 123 } 124 } 125 126 }
Producter and Consumer,布布扣,bubuko.com
标签:style blog java color os art
原文地址:http://www.cnblogs.com/pinxiong/p/3852417.html