bra*_*boy 4 java multithreading
我想在Java中同时生成200个线程.我现在正在做的是进入循环并创建200个线程并启动它们.完成这200个后,我想生成另外200个线程,依此类推.
这里的要点是我产生的前200个线程需要在产生下一组之前完成.我尝试了下面的代码,但它不起作用
for(int i=0;i<200;i++){
Thread myThread = new Thread(runnableInstance);
myThread.start();
}
for(int i=0;i<200;i++){
Thread myThread = new Thread(runnableInstance);
myThread.start();
}
Run Code Online (Sandbox Code Playgroud)
注意:我故意将for循环放两次,但我想要的效果并不是因为第二个for循环在第一组线程结束执行之前执行.
请指教
unh*_*ler 17
您应该保留已创建的线程列表.然后,一旦启动了所有这些,您就可以循环遍历列表并对join每个列表执行操作.当join循环结束时,所有线程都将运行完成.
List<Thread> threads = new List<Thread>();
for(int i=0;i<200;i++){
Thread myThread = new Thread(runnableInstance);
myThread.start();
threads.add(myThread);
}
//All threads are running
for(Thread t : threads) {
t.join();
}
//All threads are done
Run Code Online (Sandbox Code Playgroud)
觉得家庭作业,但......
spawnAndWait() {
Thread T[] = new Thread[n];
for(int i=0;i<n;i++){
T[i] = new Thread(runnableInstance);
T[i].start();
}
for (Thread t : T) {
t.join();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Java 1.5,请使用并发软件包,如果您使用的是Java 1.4.2,那么该软件包仍可作为backport使用,我很确定.
话虽这么说,我最近也有类似的任务; 您可以使用ExecutorService轻松实现它,您可以从中等待Future对象返回以了解您的任务是否完整.非常干净的模式 - 也许不是你想要达到的目标,但在现实生活中它的效果非常好:-).
一些代码:
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
taskExecutor = new ThreadPoolExecutor(200, 200, 30, TimeUnit.SECONDS, workQueue);
futureList.add(taskExecutor.submit(new MyCallable()));
for (Future<Object> future : futureList) {
future.get(); // wait for the task to complete
}
//... instantiate your second group of executors
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3962 次 |
| 最近记录: |