在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()
方法消費數據。通過這種方式,父子線程可以進行通信。