在Java中,我們可以使用wait()和notifyAll()方法來實現線程間的通信。這兩個方法用于協調多個線程對共享資源的訪問。以下是一個簡單的示例,展示了如何使用execute方法實現線程間通信:
public class ThreadCommunication {
private static final Object lock = new Object();
private static boolean messageReady = false;
public static void main(String[] args) {
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
}
static class Producer implements Runnable {
@Override
public void run() {
synchronized (lock) {
try {
System.out.println("生產者準備生產消息");
lock.wait(); // 等待消費者消費消息
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("生產者生產消息");
messageReady = true;
lock.notifyAll(); // 通知消費者消息已準備好
}
}
}
static class Consumer implements Runnable {
@Override
public void run() {
synchronized (lock) {
try {
while (!messageReady) {
lock.wait(); // 如果沒有消息,消費者等待
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("消費者消費消息");
messageReady = false;
lock.notifyAll(); // 通知生產者繼續生產消息
}
}
}
}
在這個示例中,我們創建了一個生產者線程和一個消費者線程。生產者線程在生產消息之前需要等待消費者線程消費完之前的消息,而消費者線程在沒有消息可讀時需要等待生產者線程生產消息。我們使用synchronized關鍵字和wait()、notifyAll()方法來實現線程間的通信。