08 线程池

Posted alichengxuyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08 线程池相关的知识,希望对你有一定的参考价值。

问题

线程池的作用是什么

答案

如果没有线程池,用户的每一个请求都会经历申请资源创建线程,执行线程,释放资源销毁线程这个过程,很多时间浪费在创建和销毁这两件事情上。如果用户请求时线程已经存在,用户使用线程结束也不用去考虑如何销毁,由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源的方法。线程池中的线程可以多次重用,这与数据库连接池是相同的逻辑。常见的线程池有:

  • 固定大小线程池,线程个数是固定的
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("newFixedThreadPool");
            }
        });
        executorService.shutdown();
  • 缓冲线程池,线程个数不固定,随着用户请求可以扩展线程个数
        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("newFixedThreadPool");
            }
        });
        executorService.shutdown();
  • 单个线程池,线程个数固定为1
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("newFixedThreadPool");
            }
        });
        executorService.shutdown();
  • 周期线程池,可以周期性运行
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
        executorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("newScheduledThreadPool");
            }
        },5,2,TimeUnit.SECONDS);

以上是关于08 线程池的主要内容,如果未能解决你的问题,请参考以下文章

Java——线程池

Motan在服务provider端用于处理request的线程池

Java线程池详解

Java线程池详解

Java 线程池详解

线程池-实现一个取消选项