我等不及我的线程 java
I can't wait my Threads in java
我在多线程环境中遇到问题。我可以创建几个正确执行的线程,但是这个过程永远不会结束。我等不及完成了。
我想在所有线程结束时执行一些操作,但目前这是不可能的。这是我的代码:
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();
}
}
}
有人知道如何实现我的目标吗?谢谢!
试试这个:
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();
}
}
}
不要创建线程和 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();
}
}
我在多线程环境中遇到问题。我可以创建几个正确执行的线程,但是这个过程永远不会结束。我等不及完成了。 我想在所有线程结束时执行一些操作,但目前这是不可能的。这是我的代码:
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();
}
}
}
有人知道如何实现我的目标吗?谢谢!
试试这个:
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();
}
}
}
不要创建线程和 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();
}
}