多線程 plate

package com.phj20110824.bread;

import java.util.ArrayList;   
import java.util.List;   
  
public class Plate {   
  
    List<Object> eggs = new ArrayList<Object>();   
  
    public synchronized Object getEgg() {   
        if (eggs.size() == 0) {   
            try {   
                wait();   
            } catch (InterruptedException e) {   
            }   
        }   
  
        Object egg = eggs.get(0);   
        eggs.clear();// 清空盤子   
        notify();// 喚醒阻塞隊列的某線程到就緒隊列   
        System.out.println("拿到雞蛋");   
        return egg;   
    }   
  
    public synchronized void putEgg(Object egg) {   
        if (eggs.size() > 0) {   
            try {   
                wait();   
            } catch (InterruptedException e) {   
            }   
        }   
        eggs.add(egg);// 往盤子裏放雞蛋   
        notify();// 喚醒阻塞隊列的某線程到就緒隊列   
        System.out.println("放入雞蛋");   
    }   
       
    static class AddThread extends Thread{   
        private Plate plate;   
        private Object egg=new Object();   
        public AddThread(Plate plate){   
            this.plate=plate;   
        }   
           
        public void run(){   
            for(int i=0;i<5;i++){   
                plate.putEgg(egg);   
            }   
        }   
    }   
       
    static class GetThread extends Thread{   
        private Plate plate;   
        public GetThread(Plate plate){   
            this.plate=plate;   
        }   
           
        public void run(){   
            for(int i=0;i<5;i++){   
                plate.getEgg();   
            }   
        }   
    }   
       
    public static void main(String args[]){   
        try {   
            Plate plate=new Plate();   
            Thread add=new Thread(new AddThread(plate));   
            Thread get=new Thread(new GetThread(plate));   
            add.start();   
            get.start();   
            add.join();   
            get.join();   
        } catch (InterruptedException e) {   
            e.printStackTrace();   
        }   
        System.out.println("測試結束");   
    }   
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章