Java多线程进阶知识梳理(下)

目录

1.线程池(重点)3大方法,7大参数,4大策略

2.CPU密集型和IO密集型(确定线程池的最大线程数)

3.四大原生函数式接口(基础不多说)

4.Forkjoin详解

5.异步回调(CompletableFuture)

6.JMM和Volatile理解

7.彻底玩转单例模式

8.深入理解CAS

9.可重入锁

9.1.公平锁和非公平锁

9.2.可重入锁

9.3.自旋锁

10.死锁的解决办法


1.线程池(重点)3大方法,7大参数,4大策略

池化技术的本质:占用系统资源,优化资源的使用

线程池,连接池,内存池,常量池

创建,销毁,十分的浪费资源

线程池的好处:

降低资源的消耗

搞高响应的速度

三大方法:

//Executors 线程池的工具类,阿里巴巴开发手册禁止使用
//可以伸缩的线程池,最大21亿
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
//指定线程数的线程池
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(10);
//一个线程的线程池
ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();

//线程池记得要关闭
newCachedThreadPool.shutdown();
newFixedThreadPool.shutdown();
newSingleThreadExecutor.shutdown();

七大参数:

源码分析:

本质都是调用了ThreadPoolExecutor

//newCachedThreadPool
public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue());
}

//newFixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue());
}

//newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue()));
}

public ThreadPoolExecutor(int corePoolSize,//核心线程池大小
                              int maximumPoolSize,//最大核心线程池大小
                              long keepAliveTime,//存活时间
                              TimeUnit unit,//存活时间的单位
                              BlockingQueue workQueue,//阻塞队列
                              ThreadFactory threadFactory,//线程工厂
                              RejectedExecutionHandler handler)//4种拒绝策略

四大拒绝策略

AbortPolicy:不处理这个线程,抛出异常

CallerRunsPolicy:哪来的回哪去,一般是主线程来的,交回给主线程执行

DiscardPolicy:队列满了,丢掉任务,不会抛出异常

DiscardOldestPolicy

你可能感兴趣的:(多线程)