在Java多线程编程中,使用wait()和notify()方法可以实现线程之间的通信。wait()和notify()方法是Object类的两个方法,用于实现线程的等待和唤醒操作。
wait()方法使当前线程进入等待状态,直到其他线程调用notify()方法唤醒它。使用wait()方法可以有效地控制线程的执行顺序和并发访问。
下面通过一个示例来演示使用wait()和notify()方法进行线程间通信:
class Message {
private String message;
private boolean empty = true;
public synchronized String read() {
while(empty) {
try {
wait(); // 等待直到消息可读
} catch (InterruptedException e) {
e.printStackTrace();
}
}
empty = true;
notifyAll(); // 唤醒其他等待线程
return message;
}
public synchronized void write(String message) {
while(!empty) {
try {
wait(); // 等待直到消息被读取
} catch (InterruptedException e) {
e.printStackTrace();
}
}
empty = false;
this.message = message;
notifyAll(); // 唤醒其他等待线程
}
}
class Reader implements Runnable {
private Message message;
public Reader(Message message) {
this.message = message;
}
public void run() {
String threadName = Thread.currentThread().getName();
for(int i = 0; i < 5; i++) {
String msg = message.read();
System.out.println(threadName + " read: " + msg);
}
}
}
class Writer implements Runnable {
private Message message;
public Writer(Message message) {
this.message = message;
}
public void run() {
String threadName = Thread.currentThread().getName();
String[] messages = {"Hello", "World", "Java", "Thread", "Communication"};
for(String msg : messages) {
message.write(msg);
System.out.println(threadName + " write: " + msg);
try {
Thread.sleep(1000); // 线程休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadCommunicationExample {
public static void main(String[] args) {
Message message = new Message();
Thread readerThread = new Thread(new Reader(message), "ReaderThread");
Thread writerThread = new Thread(new Writer(message), "WriterThread");
readerThread.start();
writerThread.start();
}
}
以上代码中,定义了一个Message类,其中包含了一个私有的message字符串和一个标志位empty。read()方法用于读取消息,如果消息为空则进入等待状态,直到有线程调用了write()方法写入消息。write()方法用于写入消息,如果消息不为空则进入等待状态,直到有线程调用了read()方法读取消息。在read()和write()方法中使用了synchronized关键字来保证同步访问。
在主函数中,创建了一个Message对象和两个线程,一个用于读取消息,一个用于写入消息。通过调用start()方法启动两个线程,可以看到读取线程和写入线程交替执行,实现了线程之间的通信。
通过使用wait()和notify()方法,可以在多线程编程中实现线程之间的通信和同步操作。这种方式可以确保线程按照我们期望的顺序执行,并避免了线程间的竞争条件。



