[color=red][size=large][b]四种线程池的特点如下所示:[/b][/size][/color]
[color=blue][b]1、缓存型的[/b][/color]
[b]特点:线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程[/b]
[color=blue][b]2、固定大小的[/b][/color]
[b]特点:线程池大小固定,如果线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)[/b]
[color=blue][b]3、任务型的[/b][/color]
[b]特点:当实现的是scheduleAtFixedRate或者schedule时,支持定时和周期性任务,如果实现的是execute的话则为普通线程池可自定义线程池大小[/b]
[color=blue][b]4、单线程线程池[/b][/color]
[b]特点:单线程的线程池,一次最大处理量为了,超过的需要等待,不能定义线程池大小[/b]
[color=red][size=large][b]四种线程池的特点的演示代码如下:[/b][/size][/color]
[color=blue][b]1、缓存型的[/b][/color]
cachedThreadPool
[b]特点:线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程[/b]
[color=blue][b]2、固定大小的[/b][/color]
fixedThreadPool
[b]特点:线程池大小固定,如果线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)[/b]
[color=blue][b]3、任务型的[/b][/color]
scheduledThreadPool
[b]特点:当实现的是scheduleAtFixedRate或者schedule时,支持定时和周期性任务,如果实现的是execute的话则为普通线程池可自定义线程池大小[/b]
[color=blue][b]4、单线程线程池[/b][/color]
singleThreadExecutor
[b]特点:单线程的线程池,一次最大处理量为了,超过的需要等待,不能定义线程池大小[/b]
[color=red][size=large][b]四种线程池的特点的演示代码如下:[/b][/size][/color]
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Thread_test {
static ExecutorService es = Executors.newCachedThreadPool();//当前线程池特性为,线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程
//static ExecutorService es = Executors.newFixedThreadPool(3);//因为线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)
//static ExecutorService es = Executors.newScheduledThreadPool(3);//该线程池支持定时以及周期任务(A块测试代码可以测试普通多线程的情况,B块测试代码,可以测试定时任务)
//static ExecutorService es = Executors.newSingleThreadExecutor();//单线程的线程池
public static void doTest() {
// A块测试区 (CachedThreadPool,FixedThreadPool)
es.execute(new Runnable() {
public void run() {
System.out.println("执行了--");
try {
Thread.sleep(2000);//线程休眠2秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// B块测试区 (ScheduledThreadPool)
// ((ScheduledExecutorService) es).scheduleAtFixedRate(new Runnable() {
// int i=1;
// @Override
// public void run() {
//
// int time=3*i;
// System.out.println("距离第一次打印已经过了"+time+"秒");
// i++;
// }
// //}, 3, TimeUnit.SECONDS);//延迟三秒执行(定时执行的方法为schedule)
// }, 1, 3, TimeUnit.SECONDS);//每三秒执行一次
}
public static void main(String[] args) {
for (int i = 0; i < 12; i++) {
doTest();
}
}
}