参考:
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) {
}
}
}
}