用java实现编写两个线程一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C...5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数 52和字母Z结束。
时间: 2024-05-06 07:18:19 浏览: 108
Java实现多线程轮流打印1-100的数字操作
这里是一种可能的Java实现方式:
```java
public class PrintThreadDemo {
public static void main(String[] args) {
Object lock = new Object(); // 定义一个锁对象
// 创建并启动打印数字的线程
Thread numberThread = new Thread(new NumberPrinter(lock));
numberThread.start();
// 创建并启动打印字母的线程
Thread letterThread = new Thread(new LetterPrinter(lock));
letterThread.start();
}
}
// 打印数字的线程
class NumberPrinter implements Runnable {
private Object lock;
private int number = 1;
public NumberPrinter(Object lock) {
this.lock = lock;
}
@Override
public void run() {
synchronized (lock) {
while (number <= 52) {
System.out.print(number++);
System.out.print(number++);
lock.notify(); // 唤醒等待中的字母线程
try {
if (number <= 52) {
lock.wait(); // 让数字线程等待
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lock.notify(); // 唤醒可能还在等待的字母线程
}
}
}
// 打印字母的线程
class LetterPrinter implements Runnable {
private Object lock;
private char letter = 'A';
public LetterPrinter(Object lock) {
this.lock = lock;
}
@Override
public void run() {
synchronized (lock) {
while (letter <= 'Z') {
System.out.print(letter++);
lock.notify(); // 唤醒等待中的数字线程
try {
if (letter <= 'Z') {
lock.wait(); // 让字母线程等待
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lock.notify(); // 唤醒可能还在等待的数字线程
}
}
}
```
这个程序中,通过一个共享的锁对象来控制数字和字母线程的交替打印。数字线程先打印两个数字,然后唤醒等待中的字母线程,自己进入等待状态。字母线程打印一个字母,唤醒等待中的数字线程,自己进入等待状态。如此交替进行,直到数字和字母都打印完毕。注意,在最后需要额外调用一次 `lock.notify()`,以唤醒可能仍在等待的线程。
阅读全文