Java - for循环中的线程不会在前一个完成之前创建

时间:2013-11-23 12:01:03

标签: java multithreading

我正在尝试在Java中的for循环中创建新线程,但是在前一个线程完成运行之前不会启动新线程。如何在不等待前一个的情况下让它们全部启动?

这是我用来启动线程的代码:

Thread[] threads = new Thread[processors];
for(int i = 1; i <= processors; i++)
{
    threads[i] = new Thread();
    threads[i].doSomeWork();
    threads[i].run();
}

3 个答案:

答案 0 :(得分:4)

调用new Thread实际上并不创建新线程。它只是创建一个Thread对象。你必须在线程上调用start()。但这还不够。您还必须告诉Thread该做什么。

有两种方法可以告诉Thread该怎么做:

threads[i] = new Thread() {
   @Override public void run() {
     doSomeWork();
   }
};
threads[i].start();

或者

threads[i] = new Thread(new Runnable() {
   @Override public void run() {
     doSomeWork();
   }
});
threads[i].start();

答案 1 :(得分:1)

要启动下一个帖子,请使用threads[i].start(),而不是threads[i].run()

答案 2 :(得分:1)

由于您尚未指明任何同步,因此线程将启动的顺序是任意的,并且将取决于特定的JVM实现,并且还可能取决于外部因素,具体取决于doSomeWork实际执行的工作。