用Java程序写两个线程,一个线程打印1——52,另一个线程打印A——Z,打印顺序为:12A34B...5152Z
时间: 2023-11-11 19:03:34 浏览: 87
好的,这个问题是关于编程的,我会尽力回答。可以使用以下代码实现:
```java
public class PrintThread extends Thread {
private static int number = 1;
private static char letter = 'A';
private static final Object lock = new Object();
private final int id;
public PrintThread(int id) {
this.id = id;
}
public void run() {
synchronized(lock) {
while(number <= 52 && letter <= 'Z') {
if (id == 1) {
System.out.print(number++);
System.out.print(number++);
System.out.flush();
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else if (id == 2) {
System.out.print(letter++);
System.out.print(letter++);
System.out.flush();
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lock.notifyAll();
}
}
public static void main(String[] args) {
PrintThread t1 = new PrintThread(1);
PrintThread t2 = new PrintThread(2);
t1.start();
t2.start();
}
}
```
这段代码中,使用了一个静态变量 `number` 存储数字,一个静态变量 `letter` 存储字母,并使用 `synchronized` 和 `wait/notify` 实现了两个线程交替打印数字和字母。在 `run` 方法中,首先进入 `synchronized (lock)` 块中,然后根据线程 id 判断是打印数字还是字母。打印完后,使用 `lock.notify()` 唤醒等待的线程,然后自己进入等待状态,直到被唤醒。最后,在 `while` 循环结束后使用 `lock.notifyAll()` 唤醒所有等待的线程,结束程序。
阅读全文