我等不及我在java中的线程[重复]
Posted
技术标签:
【中文标题】我等不及我在java中的线程[重复]【英文标题】:I can't wait my Threads in java [duplicate] 【发布时间】:2016-11-07 17:32:42 【问题描述】:我在多线程环境中遇到问题。我可以创建几个正确执行的线程,但是这个过程永远不会结束。我等不及完成了。 当我的所有线程都结束时,我想执行一些操作,但目前这是不可能的。这是我的代码:
public static void main(String[] args)
public void run()
ExecutorService exec = Executors.newFixedThreadPool(10);
try
for(int i=0;i<100;i++)
final Integer a=i;
try
exec.submit(new Runnable()
@Override
public void run()
System.out.println(a);
);
catch (Exception e)
e.printStackTrace();
catch(Exception e)
e.printStackTrace();
有人知道如何实现我的目标吗?谢谢!
【问题讨论】:
你在哪里打电话给notify()
?
为什么要在 Thread 中创建一个新的线程池?你已经有一个线程要执行了。
也看***.com/questions/1250643/…。
【参考方案1】:
不要创建线程和ExecutorService
。这是多余的。
目前,您的程序没有退出,因为主线程调用了wait()
,但没有其他线程调用notify()
。
如果您希望主线程等到所有任务完成,请执行以下操作:
final class EjecutorUpdateContactos
void update() throws Exception
ExecutorService workers = Executors.newFixedThreadPool(10);
List<Callable<Void>> tasks = new ArrayList<>();
for(int i = 0; i < 100; i++)
int a = i;
tasks.add(new Callable<Void>()
@Override
public Void call()
System.out.println(a);
return null;
);
workers.invokeAll(tasks);
workers.shutdown();
【讨论】:
【参考方案2】:试试这个:
public class EjecutorUpdateContactos extends Thread
@Override
public void run()
ExecutorService exec = Executors.newFixedThreadPool(10);
try
for (int i = 0; i < 100; i++)
final Integer a = i;
try
exec.submit(new Runnable()
@Override
public void run()
System.out.println(a);
);
catch (Exception e)
e.printStackTrace();
catch (Exception e)
e.printStackTrace();
finally
notify();
【讨论】:
以上是关于我等不及我在java中的线程[重复]的主要内容,如果未能解决你的问题,请参考以下文章
java - 为啥main方法没有转换为java中的守护线程[重复]
线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]