在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()方法来实现线程间的通信。