并发 - 初始化时启动线程之间的差异

时间:2014-12-12 16:36:58

标签: java multithreading

我对并发有一个快速的问题。我通过runnable接口实现线程和并发。如果我首先初始化线程然后在初始化之后单独调用start,或者如果我初始化线程并从同一个for循环中调用start,会有区别吗?

这是一个例子

for (int i= 0; i < threads.length; i++)
        threads[i]= new 
        Thread(new RunnableThread(this, urls[i]));

    for (Thread thread : threads)
        thread.start();

    for (Thread thread : threads) {
        try {
            thread.join();
        } catch (InterruptedException e) {
        }
    }

 for (int i= 0; i < threads.length; i++) {
            threads[i]= new 
            Thread(new RunnableThread(this, urls[i]));
            threads[i].start();

}

        for (Thread thread : threads) {
            try {
                thread.join();
            } catch (InterruptedException e) {
            }
        }

4 个答案:

答案 0 :(得分:1)

没有区别,你无法预测在这两种情况下哪个线程都会启动。

答案 1 :(得分:0)

差异应该取决于您的操作系统如何实现。但总的来说,应该没有区别。

答案 2 :(得分:0)

,两者之间没有区别,关于线程的执行顺序,你永远无法预测Scheduler选择一个线程执行的时间或者它们获得的顺序执行,所以永远不要让你的程序逻辑依赖于线程的执行顺序

答案 3 :(得分:0)

没有一般答案,这取决于您的RunnableThread在其构造函数及其run方法中的确实。第一种方法保证所有构造函数调用将在 run方法的任何开始之前完成,第二种方法不会。这是否重要取决于代码的细节。