我在mulithreads环境中遇到问题。我可以创建几个正确执行的线程,但是这个过程永远不会结束。我等不及整理了。 当我的所有线程结束时我想做一些动作但目前是不可能的。这是我的代码:
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();
}
}
}
有人知道如何实现我的目标吗?谢谢!
答案 0 :(得分:2)
不要创建一个帖子和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();
}
}
答案 1 :(得分:-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();
}
}
}