池化技术和线程池的使用(三大方法,7大参数,4种拒绝策略)
*降低资源的消耗:线程的不停的创建销毁会十分浪费资源
*提高响应的速度
*方便管理
线程复用,可以控制最大并发数,以及管理线程
第一步:三大方法(线程池的三大方法(Exector工具类下有三大方法))
阿里巴巴规范:(线程池最好使用ThreadPoolExecutor,而不是Executors)
方法1、单个线程(创建只有一个单个线程的线程池方法)
!!!使用线程池后就要用线程池来创建线程(线程池的.execute()),线程池使用完后,程序结束,还必须要关闭线程池(.shutdown)(如何确保程序一定结束(放到finally咯))
只有一个线程在操作
方法2、线程池有固定数的多个线程(也就是有多个并发)
有5个线程在执行了
方法3、线程池的线程随着我们并发的线程多少来增加
可以看到最多有30个并发线程了
- package org.example.threadpoolexecutor;
-
-
-
- import java.util.concurrent.ExecutorService;
-
- import java.util.concurrent.Executors;
-
-
-
- public class TestThreadPoolExecutorThere {
-
- public static void main(String[] args) {
-
- // ExecutorService threadPool = Executors.newSingleThreadExecutor();//单个线程的线程池
-
- // ExecutorService threadPool = Executors.newFixedThreadPool(5);//设定固定线程个数的线程池
-
- ExecutorService threadPool = Executors.newCachedThreadPool();//可以随着使用的线程个数变化而而变化的线程池
-
- try {
-
- for (int i = 1; i <=100 ; i++) {
-
- threadPool.execute(()->{
-
- System.out.println(Thread.currentThread().getName()+"=>ok");
-
- });
-
- }
-
- } catch (Exception e) {
-
- throw new RuntimeException(e);
-
- } finally {
-
- threadPool.shutdown();
-
- }
-
- }
-
- }