手贱瞎写不要看:生产者消费者-同步问题

  1 package ThreadL;
  2 
  3 import java.util.LinkedList;
  4 
  5 class Queue extends LinkedList<String>{
  6     int lenght;
  7     public Queue(){
  8         
  9     }
 10     
 11     public Queue(int length){
 12         this.lenght = length;
 13     }
 14     
 15     public int getLength(){
 16         return this.lenght;
 17     }
 18     
 19     public String shift(){
 20         if(!this.isEmpty()){
 21             return this.remove();
 22         }else{
 23             return "空了";
 24         }
 25     }
 26     
 27     public void push(String ch){
 28         if(this.size()<=this.lenght){
 29             this.addLast(ch);
 30         }
 31     }
 32     
 33     public boolean isFull(){
 34         if(this.size() == this.lenght){
 35             return true;
 36         }else{
 37             return false;
 38         }
 39     }
 40 }
 41 class Depot{
 42     Queue queue = null;
 43     public Depot(int length){
 44         this.queue = new Queue(length);
 45     }
 46     static int i = 1;
 47     public synchronized void produce(String ch){
 48         this.notify();
 49         while(this.queue.isFull()){
 50             try {
 51                 this.wait();
 52             } catch (InterruptedException e) {
 53                 e.printStackTrace();
 54             }
 55         }
 56         this.queue.push(ch);
 57         System.out.println("生产第\t" + (i++) + "\t个产品\t" + this.queue.getLast());
 58     }
 59     public synchronized void consume(){
 60         this.notify();
 61         while(this.queue.isEmpty()){
 62             try {
 63                 this.wait();
 64             } catch (InterruptedException e) {
 65                 e.printStackTrace();
 66             }
 67         }
 68         System.out.println("消耗掉第\t" + (--i) + "\t个产品\t" + this.queue.getFirst());
 69         this.queue.shift();
 70     }
 71 }
 72 class Produce implements Runnable{
 73     Depot depot;
 74     public Produce(Depot depot){
 75         this.depot=depot;
 76     }
 77     public void run(){
 78         for(int i=0;i<10;i++){
 79             this.depot.produce("A");
 80         }
 81     }
 82 }
 83 class Consume implements Runnable{
 84     Depot depot;
 85     public Consume(Depot depot){
 86         this.depot= depot;
 87     }
 88     public void run(){
 89         for(int i=0;i<10;i++){
 90             this.depot.consume();
 91         }
 92     }
 93 }
 94 public class Thread10 {
 95     public static void main(String[] args){
 96         Depot depot = new Depot(8);
 97         Thread pro = new Thread(new Produce(depot));
 98         Thread con = new Thread(new Consume(depot));
 99         pro.start();
100         pro.setName("PRO");
101         con.start();
102         con.setName("CON");
103     }
104 }

 

posted @ 2015-07-25 18:09  程序员袍子  阅读(177)  评论(0编辑  收藏  举报