java多线程:线程池

线程池

  • 背景:经常创建和销毀、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。

  • 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毀,实现重复利用。类似生活中的公共交通工具。

  • 好处:

    • 提高响应速度(减少了创建新线程的时间)
    • 降低资源消耗(重复利用线程池中线程,不需要每次都创建
    • 便于线程管理:
      • corePoolSize:核心池的大小
      • maximumPoolSize:最大线程数
      • keepAliveTime:线程没有任务时最多保持多长时间后会终止
  • JDK5.0起提供了线程池相关API :ExecutorService和 Executors

  • ExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor

    • void execute(Runnable command): 在将来某个时间执行给定任务。 没有返回值,一般用来执行Runnable
    • <T>Future<T> submit(Callable<T> task) :提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。 一般用来执行Callable
    • void shutdown() :按过去执行已提交任务的顺序发起一个有序的关闭,但是不接受新任务。关闭连接池
  • Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

    • public static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
    //测试线程池
    public class TestPool {
        public static void main(String[] args) {
            //1.创建服务,创建线程池
            //newFixedThreadPool参数为线程池大小
            ExecutorService service = Executors.newFixedThreadPool(10);
            //执行
            service.execute(new MyThread());
            service.execute(new MyThread());
            service.execute(new MyThread());
            service.execute(new MyThread());
    
            //2.关闭连接
            service.shutdown();
        }
    }
    class MyThread implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
    
        }
    }
    //pool-1-thread-2
    //pool-1-thread-3
    //pool-1-thread-4
    //pool-1-thread-1
    
posted @ 2021-01-24 19:27  迪迦是真的  阅读(131)  评论(0)    收藏  举报
//复制代码按钮 //代码行号 //评论