用java写写两个线程一个线程打印12345......,另一个线程打印ABC......XYZ,打印顺序是IA2B3C....24X25Y26Z。的代码
时间: 2024-01-21 15:16:50 浏览: 25
下面是一个可能的实现:
```java
public class PrintThread implements Runnable {
// 打印数字线程使用的信号量,初始值为0
private Semaphore numSemaphore = new Semaphore(0);
// 打印字母线程使用的信号量,初始值为1
private Semaphore letterSemaphore = new Semaphore(1);
private int num = 1;
private char letter = 'A';
@Override
public void run() {
while (true) {
try {
if ((num - 1) % 2 == 0) { // 如果是数字线程打印
numSemaphore.acquire(); // 请求数字信号量
System.out.print(num);
num++;
if (num > 26) {
break;
}
letterSemaphore.release(); // 释放字母信号量
} else { // 如果是字母线程打印
letterSemaphore.acquire(); // 请求字母信号量
System.out.print(letter);
letter++;
if (letter > 'Z') {
break;
}
numSemaphore.release(); // 释放数字信号量
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
PrintThread printThread = new PrintThread();
new Thread(printThread).start(); // 启动打印线程
try {
printThread.numSemaphore.acquire(); // 请求数字信号量,让数字线程先打印
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(); // 换行
printThread.letterSemaphore.release(); // 释放字母信号量,让字母线程可以打印
}
}
```
代码中使用了两个信号量 `numSemaphore` 和 `letterSemaphore`,分别用于控制数字线程和字母线程的打印顺序。其中,`numSemaphore` 的初始值为0,`letterSemaphore` 的初始值为1。在打印数字时,先请求 `numSemaphore`,如果没有被占用则打印数字并释放 `letterSemaphore`;在打印字母时,先请求 `letterSemaphore`,如果没有被占用则打印字母并释放 `numSemaphore`。这样可以保证每次打印的都是数字或字母,且按照要求的顺序进行打印。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)