【发布时间】:2012-07-23 05:31:02
【问题描述】:
我有“Creator”类,它具有创建线程的匿名内部可运行类。我也有创建 GUI 的 GUI 类,按下按钮执行“创建者”类。但随后我的 GUI 冻结,直到“创建者”创建的所有线程都完成。我发现 SwingWorker 在这种情况下可以帮助我,但我不明白如何在这种特殊情况下创建一个。除了 SwingWorker,还有其他简单的方法吗?
这是我的 Creator 类的代码:
public class Creator {
final ExecutorService es;
Collection<Future<?>> futures = new LinkedList<>();
public Creator() {
es = Executors.newFixedThreadPool(10);
}
public void runCreator() {
for (int i = 0; i < 100; i++) {
futures.add(es.submit(new Check(i)));
}
es.shutdown();
for (Future<?> future : futures) {
try {
future.get();
} catch (Exception ex) {
}
}
}
private class Check implements Runnable {
private int i;
private Check(int i) {
this.i = i;
}
@Override
public void run() {
System.out.println("Number: "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
}
}
}
【问题讨论】:
-
能否展示一些您正在创建线程的代码?
-
好的,我会编辑我的代码,我会尽量让它变得简单
-
谢谢,看起来这是因为您调用了 Future 的 get 方法。
-
是的,现在我自己也搞定了,但我无法删除它,因为我需要知道线程何时完成
标签: java multithreading user-interface swingworker