参考:
http://curious.iteye.com/blog/2298849
网上有很多Executors的例子,但有些写的非常草率,都只是写如何创建,但有些没有附上关闭方法。
Executors作为局部变量时,创建了线程,一定要记得调用executor.shutdown();来关闭线程池,如果不关闭,会有线程泄漏问题。
如下有问题的代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestThread {
public static void main(String[] args) {
while (true) {
try {
ExecutorService service = Executors.newFixedThreadPool(1);
service.submit(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
});
service = null;
} catch (Exception e) {
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
运行后,查看jvm,会发现线程每2秒就增长一个。
加了shutdown代码后,就一直很平稳。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestThread {
public static void main(String[] args) {
while (true) {
ExecutorService service = Executors.newFixedThreadPool(1);
try {
service.submit(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
});
} catch (Exception e) {
}finally{
service.shutdown();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
本文介绍了在Java中使用Executors创建线程池时正确关闭的重要性,并提供了对比示例,展示了不正确关闭线程池可能导致的线程泄漏问题。

1万+

被折叠的 条评论
为什么被折叠?



