.两个线程交替打印1A2B3C....26Z,一个线程输出1.....26, // 一个线程输出A.......Z,使用Java的 // synchronized同步代码块结合wait() notify()完成 // (提示 :我们讲过的生产者消费者模式思想(等待唤醒机制) -信号灯
时间: 2023-05-27 14:02:27 浏览: 137
//实现)
public class PrintThread {
public static void main(String[] args) {
// 创建对象锁
final Object lock = new Object();
// 创建线程1,负责输出1...26
Thread thread1 = new Thread(() -> {
synchronized (lock) {
for (int i = 1; i <= 26; i++) {
System.out.print(i);
try {
// 输出完后唤醒其他线程
lock.notify();
// 如果是最后一个字符,则不需要等待,退出循环
if (i == 26) {
break;
}
// 等待其他线程打印字符
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
// 创建线程2,负责输出A...Z
Thread thread2 = new Thread(() -> {
synchronized (lock) {
for (char i = 'A'; i <= 'Z'; i++) {
System.out.print(i);
try {
// 输出完后唤醒其他线程
lock.notify();
// 如果是最后一个字符,则不需要等待,退出循环
if (i == 'Z') {
break;
}
// 等待其他线程打印数字
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
// 启动线程1和线程2
thread1.start();
thread2.start();
}
}
// 输出:1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z
阅读全文