线程间的通信

1.线程间通信的出现场景

   模拟生产者-消费者案例说明:

 

 

   生产者生成水果,如果水果没有被买走,那么就不生产处于等待状态,如果水果被消费者买走,这时候消费者就会通知生产者水果已买走请生产,消费者同理,如果水果已经生成出来,那么就买走,买走之后再通知生产者水果没了请生产

2.线程间通信的实现

  通信规则   (1)线程间的通信共享数据一定要有同步代码块synchronized

       (2)一定要有wait和notify,而且二者一定是成对出现

       (3)生产者和消费者的线程实现一定是在while(true)里边

  案例实现(1)共享资源类(水果篮),代码如下:

 

public class Basket {
    
    private boolean isEmpty;

    public void setEmpty(boolean empty) {
        isEmpty = empty;
    }
    
    public boolean isEmpty(){
        return isEmpty;
    }
}

 

  (2)生产者,代码如下:

public class Producer extends Thread{

    private Basket basket;

    public Producer(Basket basket){
        super();
        this.basket = basket;
    }
    @Override
    public void run(){
        while (true){
            //定义一个同步代码块
            synchronized (basket){
                try {
                    if(!basket.isEmpty()){
                        //线程等待状态
                        basket.wait();
                    }
                    System.out.println("生产水果");
                    //通知在这个共享对象上等待的线程
                    basket.setEmpty(false);
                    basket.notify();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  (3)消费者,代码如下:

public class Consumer extends Thread{

    private Basket basket;

    public Consumer(Basket basket){
        super();
        this.basket = basket;
    }
    @Override
    public void run(){
        while (true){
            //定义一个同步代码块
            synchronized (basket){
                try {
                    if(basket.isEmpty()){
                        //线程等待状态
                        basket.wait();
                    }
                    System.out.println("消费水果");
                    //通知在这个共享对象上等待的线程
                    basket.setEmpty(true);
                    basket.notify();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  

 

  

posted @ 2019-12-13 15:13  小小吸血鬼  阅读(192)  评论(0编辑  收藏  举报