Java调用线程在同一循环中启动
我有一个为每个线程设置作业的循环 我的问题是如何在同一个循环中启动线程,并避免另一个循环Java调用线程在同一循环中启动,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,我有一个为每个线程设置作业的循环 我的问题是如何在同一个循环中启动线程,并避免另一个循环 List<Thread> works= new ArrayList<Thread>(); for (final action a : actions) { threads.add(new Thread(() -> { jobMethod(a); })); } 声明
List<Thread> works= new ArrayList<Thread>();
for (final action a : actions) {
threads.add(new Thread(() -> {
jobMethod(a);
}));
}
声明一个变量?似乎很琐碎:
Thread t = new Thread(() -> jobMethod(a));
threads.add(t);
t.start();
只是:
List works=new ArrayList();
针对(最终行动a:行动){
//局部变量
线程tTmp=新线程(()->{
方法(a);
});
线程。添加(tTmp);
//然后开枪!
tTmp.start();
}
?
;-) 我可以在同一个循环中添加tTmp.join(),否则它会失去它的效果,因为我在后面有一个循环:for(Thread w:works){w.join();}我对此表示怀疑(仅当您希望“顺序”处理时)…
start()
是“异步代码”,join()
是“阻塞”)…那么对于“同步”-相同的循环,对于“异步”-独立回路!您的意思是,对于异步相同的循环,im设置作业和同步(连接)的循环是独立的循环!不,完全不同!:-)(连接仍将按顺序阻塞/连接,但所有线程都有机会执行/启动;)胡再次阅读了您的答案您的意思是连接在独立循环中如果我喜欢async例如,我在thread.start中首先有两个循环,完成后,我在thread join()中有另一个循环,join()呢我可以将其添加到同一个循环中吗?显然,not-join()会冻结该线程(只是,阻止该线程生成子线程)。无法在一个循环中创建10个线程,启动它们,让它们同时运行,并等待所有10个线程完成。@user63898 Re,“join()…”在启动线程后立即编写加入线程的代码是毫无意义的。使用线程的全部意义在于,您可以启动一个线程,然后在线程运行时执行其他操作。如果启动新线程的代码只等待新线程完成,那么您将完全失败。
Thread t = new Thread(() -> jobMethod(a));
threads.add(t);
t.start();
List<Thread> works= new ArrayList<Thread>();
for (final action a : actions) {
// local var
Thread tTmp = new Thread(() -> {
jobMethod(a);
});
threads.add(tTmp);
// and shoot!
tTmp.start();
}