Java多线程倒计时同时输出
如下代码,简洁实现count个线程,同步打印倒计时:
public class ThreadSync {
public static void main(String[] args) {
// 开启5个线程,同步输出倒计时30s,
threadMethod(5, 30);
}
// count 线程数量,seconds倒计时秒数
public static void threadMethod(int count, int seconds) {
// 格式化时间输出
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 遍历线程
for (int i = 0; i < count; i++) {
// lambda 表达式实现函数式接口
new Thread(() -> {
// 线程本地变量,线程安全
ThreadLocal<Integer> local = new ThreadLocal<>();
local.set(seconds);
while (true) {
System.out.println(String.format("线程:%s,倒计时:%d,当前时间:%s", Thread.currentThread().getId(),
local.get(), sf.format(new Date())));
if (local.get() == 0)
break;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
local.set(local.get() - 1);
}
}).start();
}
}
}
结果如图: