你能发现这个bug吗?这将抛出
java.lang.OutOfMemoryError.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestTheads {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
while(true) {
executorService.submit(new Runnable() {
public void run() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
});
}
}
}
错误是我调用executorService.submit()而不是executorService.execute(),因为submit()返回一个我忽略的Future对象.使用execute(),该程序实际上将永远运行.
但是,有一个并不总是有一个execute()方法,就像使用ScheduledExecutorService时一样:
public static void main(String[] args) {
// this will FAIL because I ignore the ScheduledFuture object
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
while(true) {
executorService.scheduleWithFixedDelay(new Runnable() {
public void run() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
对于不返回任何东西的任务应该做什么,只计算?
任何想法将不胜感激!
编辑:ThreadPoolExecutors purge()看起来很有前途,但它只清除已取消的任务.