用java写两个线程,一个线程打印1——52,另一个线程打印A——Z,打印顺序为:12A34B...5152Z
时间: 2023-10-29 21:07:12 浏览: 169
以下是实现该功能的 Java 代码:
```java
public class PrintThread {
private static Object lock = new Object();
private static int count = 1;
private static char letter = 'A';
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (lock) {
while (letter <= 'Z') {
if (count % 2 == 1) {
System.out.print(count++);
System.out.print(count++);
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lock.notify();
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
while (letter <= 'Z') {
if (count % 2 == 0) {
System.out.print(letter++);
count++;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lock.notify();
}
});
t1.start();
t2.start();
}
}
```
在该代码中,我们创建了两个线程 t1 和 t2,t1 负责打印数字,t2 负责打印字母。我们使用一个共享的锁对象 lock 来确保两个线程的顺序。其中,count 表示当前已经打印的数字,letter 表示当前已经打印的字母。
在 t1 的 run 方法中,我们使用 while 循环来判断是否还有字母需要打印。如果 count % 2 == 1,说明当前是数字需要打印,我们就打印两个数字并且唤醒 t2 线程。否则,说明当前是字母需要打印,我们就等待 t2 线程打印完毕,然后再继续执行。
在 t2 的 run 方法中,我们同样使用 while 循环来判断是否还有字母需要打印。如果 count % 2 == 0,说明当前是字母需要打印,我们就打印一个字母并且唤醒 t1 线程。否则,说明当前是数字需要打印,我们就等待 t1 线程打印完毕,然后再继续执行。
最后,我们启动两个线程,并且让它们开始执行。如果一切正常,程序会按照题目要求打印出 12A34B...5152Z。
阅读全文