使用Java多线程技术的时候,我们通常需要创建多个线程来为我们的程序服务。这个时候我们就可能用上线程池这个技术。
在ExecutorService常用的线程池有三种类型:
1)newFixedThreadPool:创建一个工作线程数量固定的线程池。
2)newCachedThreadPool:创建一个可缓存线程池,可灵活回收空闲线程。
3)newSingleThreadExecutor:创建一个单线程化的线程池。
1)newFixedThreadPool
创建一个工作线程数量固定的线程池,当线程池未满,创建一个新线程会自动进入线程池,当线程池已满,新线程会队列等待。
public static void NewFixedThreadPool(){
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
System.out.println(Thread.currentThread().getName() + " " + i);
Thread.sleep(3000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
});
}
executor.shutdown();
}
2)newCachedThreadPool
创建一个可缓存线程池,可灵活回收空闲线程。
public static void NewCacheThreadPool(){
ExecutorService executor=Executors.newCachedThreadPool();
for(int i=0;i<3;i++){
executor.execute(new Runnable(){
@Override
public void run(){
try {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
});
}
executor.shutdown();
}
创建一个单线程化的线程池。
public static void NewSingleThreadExecutor(){
ExecutorService executor=Executors.newSingleThreadExecutor();
for(int i=0;i<3;i++){
executor.execute(new Runnable(){
@Override
public void run(){
try {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
});
}
executor.shutdown();
}
使用线程池的好处:
1)减少线程大量创建和销毁所消耗的时间。
2)防止系统大量创建进程而导致消耗完系统内存。