Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用join让线程按顺序打印的正确方法是什么_Java_Multithreading_Join - Fatal编程技术网

Java 使用join让线程按顺序打印的正确方法是什么

Java 使用join让线程按顺序打印的正确方法是什么,java,multithreading,join,Java,Multithreading,Join,我很好奇如何使用join()(也欢迎任何其他方式)让线程按顺序打印出来。例如,我有如下代码: private static class LittleThread implements Runnable { int val; public LittleThread(int i) { val = i; } public void run() { System.out.println("Thread " + val + " finishe

我很好奇如何使用
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();
    }
}
私有静态类LittleThread实现可运行{
int-val;
公共小线程(inti){
val=i;
}
公开募捐{
System.out.println(“线程”+val+“完成”);
}
}
公共静态void main(字符串[]args)引发异常{

对于(int i=1;i要使多个
可运行的
对象在单独的
线程中执行,请按顺序执行,应使用单个线程:

publicstaticvoidmain(字符串[]args)引发异常{
ExecutorService executor=Executors.newSingleThreadExecutor();
对于(int i=0;i<10;i++){
执行人提交(新LittleThread(i));
}
executor.shutdown();
}

ExecutorService
负责正确管理
线程
对象(本例中为所有对象)…根据需要创建它们(it),并通过调用
join
终止它们(服务关闭)。

“按顺序运行线程”-这有点忽略了重点。你如何用锤子拧入螺钉?你没有。(为什么你想按顺序运行线程?为什么每个人都想做的第一件事就是让线程完全无用?)@DavidSchwartz我同意。但这是一个面试问题。我想面试官只是想确保应聘者知道多线程是如何工作的,以及你是否知道如何使用一些线程函数使上面显示的代码工作。更多的是测试多线程概念。然后我对面试问题给出了正确的答案--你不这样做是因为这毫无意义。大多数面试问题都是寻找你是如何对一个问题进行推理的。当被问及如何做你永远不会做的事情时,你应该说你永远不会做,并解释原因!如果面试问题是“你如何使用手提钻将恶魔从某人的头脑中赶走?”,答案不是关于如何握住手提钻!对此代码最简单的更改是使用
run()
而不是
start()
public static void main(String[] args) throws Exception {
    ExecutorService executor = Executors.newSingleThreadExecutor();

    for (int i = 0; i < 10; i++) {
        executor.submit(new LittleThread(i));
    }

    executor.shutdown();
}