Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java调用线程在同一循环中启动_Java_Multithreading_Thread Safety - Fatal编程技术网

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();
}