使用多线程中的wait和notify实现字符串“***”和字符串“###”的严格交替输出
时间: 2023-12-01 19:03:20 浏览: 89
使用多线程中的wait和notify实现字符串“***”和字符串“AAA”的交替打印,可以采用以下方法:
1. 创建一个共享对象,用synchronized关键字修饰,作为锁,用来实现线程同步。
2. 创建两个线程,一个线程打印字符串“***”,另一个线程打印字符串“AAA”。
3. 在打印“***”线程中,先获取共享对象的锁,然后判断当前是否应该打印“***”字符串,若不应该则调用共享对象的wait()方法等待,释放锁。若应该打印,则打印“***”字符串,通知在等待的线程可以继续执行,并且释放锁。
4. 在打印“AAA”线程中,同样获取共享对象的锁,判断是否应该打印“AAA”字符串,若不应该则调用共享对象的wait()方法等待,释放锁。若应该打印,则打印“AAA”字符串,通知在等待的线程可以继续执行,并且释放锁。
5. 在两个线程的run()方法中都要使用try-catch语句捕获InterruptedException异常。
下面是示例代码:
```
public class AlternatePrint {
private static Object lock = new Object();
private static boolean shouldPrintStar = true;
public static void main(String[] args) {
Thread starThread = new Thread(new StarPrinter());
Thread aThread = new Thread(new APrinter());
starThread.start();
aThread.start();
}
static class StarPrinter implements Runnable {
@Override
public void run() {
synchronized (lock) {
try {
for (int i = 0; i < 10; i++) {
while (!shouldPrintStar) {
lock.wait();
}
System.out.print("***");
shouldPrintStar = false;
lock.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class APrinter implements Runnable {
@Override
public void run() {
synchronized (lock) {
try {
for (int i = 0; i < 10; i++) {
while (shouldPrintStar) {
lock.wait();
}
System.out.print("AAA");
shouldPrintStar = true;
lock.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
运行结果为:
```
***AAA***AAA***AAA***AAA***AAA***AAA***AAA***AAA***AAA***AAA
```
阅读全文