什么是线程池?线程池的种类以及创建方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qichangjian/article/details/88022917

1、什么是线程池:

线程池的概念大家应该都很清楚,帮我们重复管理线程,避免创建大量的线程增加开销
线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。

java.util.concurrent.Executors提供了一个	java.util.concurrent.Executor接口的实现用于创建线程池

2.线程池的种类

在这里插入图片描述
在这里插入图片描述
常见线程池
①newSingleThreadExecutor
单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务
②newFixedThreadExecutor(n)
固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行
③newCacheThreadExecutor(推荐使用)
可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
④newScheduleThreadExecutor
大小无限制的线程池,支持定时和周期性的执行线程

3.线程池的创建方式

ExecutorService是所有的线程池都实现了的接口,用这个接口可以定义句柄。

Executors类用于创建不同种类的线程池,Executors.new***()方法就可以返回一个线程池的对象,***表示线程池的名字。

简单代码举例:

package com.thread;
/*
 * 通过实现Runnable接口,实现多线程
 * Runnable类是有run()方法的;
 * 但是没有start方法
 * */

public class MyThread extends Thread { 
    @Override
    public void run() {
//        super.run();
    System.out.println(Thread.currentThread().getName()+"正在执行....");
    } 
}
package com.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/*
 * 通过实现Runnable接口,实现多线程
 * Runnable类是有run()方法的;
 * 但是没有start方法
 * */

public class singleThreadExecutorTest{
    public static void main(String[] args) {
        //创建一个可重用固定线程数的线程池
        ExecutorService pool=Executors.newSingleThreadExecutor();
        
        //创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口;    
        Thread t1=new MyThread();    
        Thread t2=new MyThread();  
        Thread t3=new MyThread();    
        Thread t4=new MyThread();    
        Thread t5=new MyThread();
                
        //将线程放到池中执行;      
        pool.execute(t1);
        pool.execute(t2);
        pool.execute(t3);
        pool.execute(t4);
        pool.execute(t5);
        
        //关闭线程池     
        pool.shutdown();
    }
}

结果:

pool-1-thread-1正在执行....
pool-1-thread-1正在执行....
pool-1-thread-1正在执行....
pool-1-thread-1正在执行....
pool-1-thread-1正在执行....

猜你喜欢

转载自blog.csdn.net/qichangjian/article/details/88022917