Java父子线程如何进行通信

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

在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()方法消费数据。通过这种方式,父子线程可以进行通信。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号