我对并发有一个快速的问题。我通过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) {
}
}
答案 0 :(得分:1)
没有区别,你无法预测在这两种情况下哪个线程都会启动。
答案 1 :(得分:0)
差异应该取决于您的操作系统如何实现。但总的来说,应该没有区别。
答案 2 :(得分:0)
否,两者之间没有区别,关于线程的执行顺序,你永远无法预测Scheduler
选择一个线程执行的时间或者它们获得的顺序执行,所以永远不要让你的程序逻辑依赖于线程的执行顺序
答案 3 :(得分:0)
没有一般答案,这取决于您的RunnableThread
类在其构造函数及其run
方法中的确实。第一种方法保证所有构造函数调用将在 run
方法的任何开始之前完成,第二种方法不会。这是否重要取决于代码的细节。