编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束 用java语言实现
时间: 2024-12-31 20:04:36 浏览: 11
以下是用Java语言实现的代码,用于创建两个线程,一个打印1-52的整数,另一个打印A-Z的字母,并按照指定顺序交替打印:
```java
public class NumberLetterPrinter {
private static final Object lock = new Object();
private static boolean isNumberTurn = true;
private static int number = 1;
private static char letter = 'A';
public static void main(String[] args) {
Thread numberThread = new Thread(() -> {
while (number <= 52) {
synchronized (lock) {
while (!isNumberTurn) {
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print(number);
number++;
System.out.print(number);
number++;
isNumberTurn = false;
lock.notifyAll();
}
}
});
Thread letterThread = new Thread(() -> {
while (letter <= 'Z') {
synchronized (lock) {
while (isNumberTurn) {
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print(letter);
letter++;
isNumberTurn = true;
lock.notifyAll();
}
}
});
numberThread.start();
letterThread.start();
}
}
```
这段代码的工作原理如下:
1. 我们使用一个共享的`lock`对象来同步两个线程。
2. `isNumberTurn`布尔变量用于指示当前该哪个线程打印。
3. `number`变量用于跟踪当前要打印的数字,`letter`变量用于跟踪当前要打印的字母。
4. `numberThread`线程负责打印数字。每当该线程运行时,它会检查是否轮到它打印。如果不是,它会等待。如果是,它会打印两个数字,然后将`isNumberTurn`设置为`false`(表示轮到字母线程打印),并通知所有等待的线程。
5. `letterThread`线程负责打印字母。它的逻辑与数字线程类似,但它是等待轮到它打印,然后打印一个字母,再将`isNumberTurn`设置为`true`(表示轮到数字线程打印),并通知所有等待的线程。
6. 主方法中,我们创建并启动这两个线程。
这个程序会按照要求的顺序打印数字和字母,直到打印到52和Z为止。
阅读全文