1.缓存线程池
缓存线程池线程数量没有限制。
任务加入后缓存线程池的执行流程。
①判断线程池中是否有空闲的线程数。
②存在则使用空闲的线程。
③若不存在空闲的线程,则创建一个新的线程放入线程池中,然后使用该线程。
缓存线程池的创建方法
public static void main(String[] args) {
//创建缓存线程池
ExecutorService service = Executors.newCachedThreadPool();
//向线程池中放入任务
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("这是缓存线程池的创建方法");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("这是缓存线程池的创建方法");
}
});
}
2.单线程线程池
单线程线程池中只有一个线程。
任务加入后单线程线程池的执行流程。
①判断线程池中的单个线程是否空闲。
②空闲则使用该线程。
③不空闲则等待该线程空闲在使用。
单线程线程池创建方法
public static void main(String[] args) {
//创建单线程线程池
ExecutorService service = Executors.newSingleThreadExecutor();
//向线程池中放入任务
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("这是单线程线程池的创建方法");
}
});
}
3.定长线程池
定长线程池中的线程是指定的数量。
任务加入后定长线程池的执行流程。
①判断线程池中是否有空闲的线程数。
②存在则使用空闲的线程。
③不存在空闲线程,且线程池中线程未满的情况,创建新的线程放入线程池中,然后使用新的线程。
④不存在空闲线程,且线程池中线程已满的情况,则等待线程池中存在空闲线程在使用。
定长线程池创建方法
public static void main(String[] args) {
//创建定长线程池
ExecutorService service = Executors.newFixedThreadPool(2);
//向线程池中放入任务
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("这是定长线程池的创建方法");
}
});
}
4.周期定长线程池
可以理解为有周期性的定长线程池,线程是指定的数量。
任务加入后周期定长线程池的执行流程。
①判断线程池中是否有空闲的线程数。
②存在则使用空闲的线程。
③不存在空闲线程,且线程池中线程未满的情况,创建新的线程放入线程池中,然后使用新的线程。
④不存在空闲线程,且线程池中线程已满的情况,则等待线程池中存在空闲线程在使用。
周期性执行任务时
定时执行任务,当某个机制触发时,自动执行该任务。
周期定长线程池创建方法
public static void main(String[] args) {
//创建周期定长线程池
ScheduledExecutorService service =Executors.newScheduledThreadPool(2);
//向线程池中放入任务
/*
* 参数1.定时执行的任务
* 参数2.给定的时长数字
* 参数3.时长数字的时间单位,TimeUnit来指定常亮
* */
service.schedule(new Runnable() {
@Override
public void run() {
System.out.println("这是周期定长线程池的创建方法");
}
},1, TimeUnit.SECONDS);
}