使用99个线程,顺序打印1到99。基本设计思路是:
- 定义一个全局变量totalNum来控制当前需要打印哪个数字
- 每个线程都使用一个顺序编号num
- 当某个线程检测到totalNum与num相等时,打印num,并且在该线程递增num,以便通知下一个线程打印。
- 多线程相关:totalNum使用volatile关键字修饰保证线程可见性;每个线程内部基于synchronized关键字和基于Object类的wait方法等待轮到自己打印。
实现源码:
/**
* Author: xyz
* Version: 1.0
* Date: 2019-09-21
* Description: 打印1到99
**/
public class ThreadPrint99 {
private static volatile int totalNum = 0;
public static void main(String[] args) {
Object lock = new Object();
for (int i = 1; i <= 99; i++) {
// 每个线程一个编号
int num = i;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
synchronized (lock) {
while (totalNum != num) {
lock.wait();
}
System.out.println(Thread.currentThread().getName() + ": " + num);
totalNum = totalNum + 1;
// 通知所有等待线程,只有满足条件的可以从以上的while返回
lock.notifyAll();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, "thread-"+num);
thread.start();
}
// 主线程启动,其中totalNum是volatile修饰,线程可见性
synchronized (lock) {
totalNum = totalNum + 1;
lock.notifyAll();
}
}
}
本文标题:使用99个线程顺序打印1到99:volatile与synchronized关键字的应用
本文链接:https://blog.quwenai.cn/post/3310.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。






还没有评论,来说两句吧...