在main方法中启动两个线程,在a线程中打印1~52,b线程中打印A~Z
时间: 2023-12-30 11:06:40 浏览: 70
可以使用两个线程共享一个对象,利用该对象的wait()和notify()方法实现线程间的协作。
具体实现如下:
```java
public class PrintDemo {
private static Object lock = new Object();
private static boolean flag = false;
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
for (int i = 1; i <= 52; i++) {
System.out.print(i);
if (i % 2 == 0) {
flag = true;
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lock.notify();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
for (char c = 'A'; c <= 'Z'; c++) {
if (!flag) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(c);
flag = false;
lock.notify();
}
}
}
});
t1.start();
t2.start();
}
}
```
其中,flag变量用于判断是否可以打印字母,初始值为false。在t1线程中,每次打印一个偶数后,将flag置为true,并唤醒t2线程;然后自己进入等待状态。在t2线程中,如果flag为false,则进入等待状态;否则打印一个字母,并将flag置为false,唤醒t1线程。循环执行直到打印完毕。注意,最后需要唤醒t1线程,以防止t1线程一直处于等待状态。
阅读全文