【发布时间】:2017-05-18 21:23:11
【问题描述】:
我很好奇如何让线程使用join()顺序打印出来。(也欢迎任何其他方式。)例如,我的代码如下:
private static class LittleThread implements Runnable {
int val;
public LittleThread(int i) {
val = i;
}
public void run() {
System.out.println("Thread " + val + " finished.");
}
}
public static void main(String[] args) throws Exception {
for (int i = 1; i <= 10; i++) {
new Thread(new LittleThread(i)).start();
}
}
我想知道,我们如何处理这段代码,以使 main() 按顺序打印:
线程 1 完成。
线程 2 已完成。
线程 3 已完成。
...
【问题讨论】:
-
“按顺序运行线程” - 这有点没抓住重点。
-
如何用锤子拧螺丝?你没有。 (为什么要按顺序运行线程?为什么每个人对线程做的第一件事似乎总是让它们完全无用?)
-
@DavidSchwartz 我同意。但这是一个被问到的面试问题。我认为面试官只是想确保应聘者知道多线程是如何工作的,以及你是否知道如何使用一些线程函数来使上面显示的代码工作。更多测试多线程概念。
-
然后我给出了面试问题的正确答案——你不这样做是因为它没有意义。大多数面试问题都在寻找你如何推理一个问题。当被问及如何做你永远不会做的事情时,你应该说你永远不会这样做并解释原因!如果面试问题是“你如何使用手提钻将恶魔从某人的脑袋里赶走”,那么答案不是关于如何拿着手提钻!
-
对这段代码最简单的修改是使用
run()而不是start()。
标签: java multithreading join