线程池及并发包

一.线程组件

1.线程池

1.1.线程池类型:newSingleThreadExecutor、newFixedThreadPool 等等

1.2. 线程池参数:

        

1.3.线程池执行原理以及关闭原理:

       

 

 

        

        

        

1.4.线程池终止(具体代码看上述截图):

    shutdown:线程池将变shutdown状态,此时不接收新任务,但会处理完正在运行的 和 在阻塞队列中等待处理的任务。

    shutdownNow:线程池变stop状态,此时不接收新任务,不再处理在阻塞队列中等待的任务,还会尝试中断正在处理中的工作线程。

2.阻塞队列(略)

 

二.线程方法

    包括join(long millis)、wait(long millis)、future、callable等原理。

1. join原理:在ThreadA中调用ThreadB.join();

     

2. callbale原理: https://blog.csdn.net/u012664375/article/details/66967687

3. ReentrantLock/ReadWriteLock/Semaphore原理

3.1. ReentrantLock原理(以非公平锁举例):

        lock.lock()源码如下图所示:

         

         

         

 

 

lock.unlock()原理如下图所示:

        

        

3.2.ReadWriteLock原理(以非公平锁举例):

      ReentrantReadWriteLock.readLock().lock()

       

 

    ReentrantReadWriteLock.writeLock().lock()原理类似于ReentrantLock的nonfairTryAcquire

3. Semaphore原理(以非公平锁举例)(略):

4.  threadllocal原理:

      

     用线程池时若用threadLocal,因为核心线程始终不变,那么核心线程对应的value也不变,则会造成内存泄漏或者生产问题。

三.线程应用场景:生产者消费者、读写问题

 1. 参照 https://www.cnblogs.com/xkxf/p/7890686.html

 2. 无锁队列

    

 

四.线程锁机制:

乐观锁、悲观锁;可重入锁、读写锁;自旋锁;

小结:乐观锁,在ReentrantLock和Sempahore应用的cas;如ReentrantLock首先cas操作,cas失败则加入AQS的CLH队列,否则在进度共享代码块内,若代码块内有Condition,则会在Condition.await()处阻塞、此处为重量级锁;

          公平锁与非公平锁,如ReentrantLock的lock.lock()是否立即cas操作;是则为非公平锁;

          偏向锁:readlock.lock()首先检查当前是否已有排他锁,若已有排他锁则直接加入aqs,若无排他锁,则cas获取权限;此时偏向锁变为乐观锁;

          可重入锁:ReentrantLock在compareAndSetState失败时,若当前线程是成员变量state的set成功的那个线程,则不再加入CLH以及selfInterrupt(); 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值