我正在尝试在Java中的for
循环中创建新线程,但是在前一个线程完成运行之前不会启动新线程。如何在不等待前一个的情况下让它们全部启动?
这是我用来启动线程的代码:
Thread[] threads = new Thread[processors];
for(int i = 1; i <= processors; i++)
{
threads[i] = new Thread();
threads[i].doSomeWork();
threads[i].run();
}
答案 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实际执行的工作。