首页 > 代码库 > Producter and Consumer
Producter and Consumer
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。