使用多线程中的wait和notify实现字符串“***”和字符串“###”的严格交替输出,交替的之间休眠1秒
时间: 2024-06-10 17:07:58 浏览: 13
用Java中的多线程机制,可以使用wait()和notify()方法来实现字符串“***”和字符串“abc”的交替输出。
具体实现方法如下:
1. 定义一个共享数据的类,其中包含一个字符串参数,并提供一个set()方法和一个get()方法,用于线程间共享数据。
2. 定义一个线程类,该类能够输出字符串“***”,并且在输出完毕后唤醒其他线程。
3. 定义另一个线程类,该类能够输出字符串“abc”,并且在输出完毕后唤醒其他线程。
4. 在主线程中创建以上两个线程实例,并启动这两个线程。
5. 在主线程中进行等待处理,直到以上两个线程均完成才结束程序。
具体代码实现如下:
public class SharedData {
private String data;
public synchronized void set(String data) {
this.data = data;
}
public synchronized String get() {
return data;
}
}
public class ThreadA extends Thread {
private SharedData sharedData;
public ThreadA(SharedData sharedData) {
this.sharedData = sharedData;
}
public void run() {
for (int i = 0; i < 10; i++) {
sharedData.set("***");
System.out.println("***");
synchronized (sharedData) {
sharedData.notify();
}
try {
sleep((int) Math.random() * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadB extends Thread {
private SharedData sharedData;
public ThreadB(SharedData sharedData) {
this.sharedData = sharedData;
}
public void run() {
for (int i = 0; i < 10; i++) {
while (!sharedData.get().equals("***")) {
try {
sharedData.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
sharedData.set("abc");
System.out.println("abc");
synchronized (sharedData) {
sharedData.notify();
}
try {
sleep((int) Math.random() * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class MainApp {
public static void main(String[] args) {
SharedData sharedData = new SharedData();
ThreadA a = new ThreadA(sharedData);
ThreadB b = new ThreadB(sharedData);
a.start();
b.start();
try {
a.join();
b.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)