JUC concurrent programming thread pool (12)

Thread Pool

Three methods, 7 parameters, 4 rejection manuals

Pooling technology

 The running nature of the program takes up system resources! Optimize the use of resources! =>Pooling technology

Thread pool connection pool memory pool object pool creation and destruction is a waste of resources

Pooling technology prepares some resources in advance and someone wants to use it, just come here and return it to me after using it up

 

Benefits of thread pool

1. Reduce resource consumption

2. Improve the speed of response

3. Convenient management

Thread reuse, you can control the maximum number of concurrent management threads

Three methods

package com.xizi.pool;

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

//Executors 工具类 三大方法
public class Demo01 {
    public static void main(String[] args) {
        //单个线程
//        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        //创建一个固定的线程池的大小
//        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        //可伸缩,遇强则强 遇弱则弱
        ExecutorService threadPool = Executors.newCachedThreadPool();

        try {
            for (int i = 0; i < 100; i++) {
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+"  ok");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }


    }
}

7 parameters

本质ThreadPoolExecutor()
源码
public ThreadPoolExecutor(int corePoolSize,//核心线程池大小
                          int maximumPoolSize,//最大核心线程池大小
                          long keepAliveTime,//超时了没有人调用就会释放
                          TimeUnit unit,//超时单位
                          BlockingQueue<Runnable> workQueue,//阻塞队列
                          ThreadFactory threadFactory,//线程工厂,创建线程
                          RejectedExecutionHandler handler //拒绝策略
) {
    if (corePoolSize < 0 ||
        maximumPoolSize <= 0 ||
        maximumPoolSize < corePoolSize ||
        keepAliveTime < 0)
        throw new IllegalArgumentException();
    if (workQueue == null || threadFactory == null || handler == null)
        throw new NullPointerException();
    this.acc = System.getSecurityManager() == null ?
            null :
            AccessController.getContext();
    this.corePoolSize = corePoolSize;
    this.maximumPoolSize = maximumPoolSize;
    this.workQueue = workQueue;
    this.keepAliveTime = unit.toNanos(keepAliveTime);
    this.threadFactory = threadFactory;
    this.handler = handler;
}

 

Create a thread pool manually

package com.xizi.pool;

import java.util.concurrent.*;

//Executors 工具类 三大方法
public class Demo01 {
    public static void main(String[] args) {
        //单个线程
//        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        //创建一个固定的线程池的大小
//        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        //可伸缩,遇强则强 遇弱则弱
//        ExecutorService threadPool = Executors.newCachedThreadPool();

        //自定义线程池  工作中  ThreadPoolExecutor() 安全
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                2,
                5,
                3,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(3),
                Executors.defaultThreadFactory(),
//    1.            new ThreadPoolExecutor.AbortPolicy()//银行还有人进来,不处理这个人,抛出异常
//     2.           new ThreadPoolExecutor.CallerRunsPolicy() //哪来的去哪里
//        3.            new ThreadPoolExecutor.DiscardPolicy() //队列满了 丢掉任务,不会抛出异常
                    new ThreadPoolExecutor.DiscardOldestPolicy()// 队列满了,尝试和最早的竞争 不会抛出异常
        );

        try {
            for (int i = 0; i < 9; i++) {
                //线程池创建
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+"  ok");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }


    }
}

     How to define the largest thread? (Tuning)

//1. CPU-intensive cores are just a few to ensure the highest efficiency of Cpu

Runtime.getRuntime().availableProcessors();

//2.IO-intensive. Determine the IO-consuming threads in your program

 

 

Guess you like

Origin blog.csdn.net/weixin_45480785/article/details/105367017