Java之间线程的通信

    xiaoxiao2023-11-28  175

    Java之间线程的通信

    篮子生产者消费者测试类 篮子里面放水果,默认没有水果。生产者生产水果之后进入等待状态,并通知消费者购买水果。消费者从等待状态被唤醒购买水果使篮子变空之后,又陷入等待状态并通知生产者生产水果。

    篮子

    package cn1; public class Basket { private boolean isEmpty; public void setEmpty(boolean empty){ isEmpty = empty; } public boolean isEmpty(){ return isEmpty; } }

    生产者

    package cn1; public class Producer extends Thread{ private Basket basket; public Producer(Basket basket){ super(); this.basket = basket; } public void run(){ while (true){ //定义一个同步代码块 synchronized (basket){ if(!basket.isEmpty()){ //线程挂起,等待 try { basket.wait();//现在程序处于阻塞状态 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("生产者生产水果"); basket.setEmpty(false); //通过共享对象通知等待的线程 basket.notify(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }

    消费者

    package cn1; public class Consumer extends Thread { private Basket basket; public Consumer(Basket basket){ super(); this.basket = basket; } public void run(){ while (true){ //定义一个同步代码块 synchronized (basket){ if (basket.isEmpty()){ try { basket.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("消费者购买水果"); basket.setEmpty(true); //通过共享对象通知等待的线程 basket.notify(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }

    测试类

    package cn1; public class Test { public static void main(String[] args){ Basket basket = new Basket(); Producer producer = new Producer(basket); Consumer consumer = new Consumer(basket); producer.start(); consumer.start(); } }
    最新回复(0)