Java父子线程如何进行通信

avatar
作者
猴君
阅读量:0

在Java中,父子线程之间的通信可以通过共享变量、wait()、notify()和notifyAll()方法来实现。这里有一个简单的例子来说明如何在父子线程之间进行通信:

class SharedData {     private int data;     private boolean dataAvailable = false;      public synchronized void setData(int data) {         this.data = data;         dataAvailable = true;         notify(); // 唤醒等待的线程     }      public synchronized int getData() throws InterruptedException {         while (!dataAvailable) {             wait(); // 等待数据变为可用         }         dataAvailable = false;         return data;     } }  class ProducerThread extends Thread {     private SharedData sharedData;      public ProducerThread(SharedData sharedData) {         this.sharedData = sharedData;     }      @Override     public void run() {         for (int i = 0; i < 5; i++) {             System.out.println("Producing data: " + i);             sharedData.setData(i);             try {                 Thread.sleep(1000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } }  class ConsumerThread extends Thread {     private SharedData sharedData;      public ConsumerThread(SharedData sharedData) {         this.sharedData = sharedData;     }      @Override     public void run() {         for (int i = 0; i < 5; i++) {             try {                 int data = sharedData.getData();                 System.out.println("Consuming data: " + data);                 Thread.sleep(2000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } }  public class Main {     public static void main(String[] args) {         SharedData sharedData = new SharedData();         ProducerThread producer = new ProducerThread(sharedData);         ConsumerThread consumer = new ConsumerThread(sharedData);          producer.start();         consumer.start();     } } 

在这个例子中,我们创建了一个名为SharedData的类,它包含一个整数变量data和一个布尔变量dataAvailablesetData()方法用于设置数据,并将dataAvailable设置为truegetData()方法用于获取数据,当数据不可用时,它会等待。

ProducerThreadConsumerThread分别是生产者和消费者线程,它们共享一个SharedData对象。生产者线程使用setData()方法生成数据,消费者线程使用getData()方法消费数据。通过这种方式,父子线程可以进行通信。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!