阅读量: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
和一个布尔变量dataAvailable
。setData()
方法用于设置数据,并将dataAvailable
设置为true
。getData()
方法用于获取数据,当数据不可用时,它会等待。
ProducerThread
和ConsumerThread
分别是生产者和消费者线程,它们共享一个SharedData
对象。生产者线程使用setData()
方法生成数据,消费者线程使用getData()
方法消费数据。通过这种方式,父子线程可以进行通信。