美文网首页
Java-多线程-ScheduledThreadPoolExec

Java-多线程-ScheduledThreadPoolExec

作者: 蓝色_笔记本 | 来源:发表于2021-06-11 09:39 被阅读0次

定时线程池类的类结构图

image.png

一、条件锁

条件锁框架中对应的AQS框架中,条件队列与同步队列都用了起来。

1、T1刚来,抢占独占锁成功,T1进入NotFull条件队列,执行业务,业务完成。判断Full队列是否满足T1继续执行的条件,若不满足,阻塞线程(LockSupport.park())。
2、T2刚来,抢占独占锁成功,T2进入NotEmpty条件队列,判断NotFull队列是否满足T2执行的条件,若满足,执行业务,若不满足,阻塞线程,通知NotFull条件队列线程。NotFull条件队列把头一个线程T1转移到同步CLH队列中。
3、新的线程T1加入同步CLH队列后,唤醒队列前面线程T1(LockSupport.unpark())。

注意:条件锁中会同时存在条件队列与同步队列,但条件队列中的线程没有办法被唤醒,只有把线程转移到同步队列中才能被唤醒,才能有机会获取独占锁。

二、ScheduledThreadPoolExecutor使用

ScheduledThreadPoolExecutor框架是ThreadPoolExecutor框架的一个拓展。但ScheduledThreadPoolExecutor在添加线程任务的时候,会直接把线程任务添加到队列中。

它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式:
1、schedule(Runnable run, int postpone, TimeUnit unit),延期执行,只执行一次。
2、scheduledAtFixedRate(Runnable run, int postpone, int cycTime,TimeUnit unit),延期执行,重复执行,不管线程执行时间多长,每隔cycTime时间产生一个新的任务放入队列中。
3、scheduledWithFixedDelay(Runnable run, int postpone, int cycTime,TimeUnit unit),延期执行,重复执行,每线程执行时间+cycTime时间产生一个新的任务放入队列中。

它采用DelayQueue存储等待的任务

  1. DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序,若time相同则根据sequenceNumber排序;
  2. DelayQueue也是一个无界队列;

相关文章

  • Java-多线程-ScheduledThreadPoolExec

    定时线程池类的类结构图 一、条件锁 条件锁框架中对应的AQS框架中,条件队列与同步队列都用了起来。 1、T1刚来,...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • java-多线程

    介绍一下Syncronized锁。如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么? 修...

  • java-多线程

    多线程 synchronized 1、synchronized关键字 简介解决多个线程之间访问资源的同步性。保证被...

  • Java-浅析Object类

    Java-浅析Object类 ++2016.7.19++byside @Java-浅析Object类 ======...

  • Java-多线程(二)

    NO.1 单例设计模式 NO.2 Runtime类学习 NO.3 Timer类(掌握) NO.4 两个线程间的通...

  • Java-多线程(一)

    NO.1 多线程简介 NO.2 多线程实现方式(一) NO.3 多线程实现方式(二) NO.4 匿名内部类实现线程...

  • Java-多线程编程

    前言: Java的多线程编程随着应用功能越来越复杂,用户对软件体验要求越来越高,那么对于多线程的编程越发重要了。接...

  • Java-多线程-synchronized

    一、锁 概述 加锁目的:序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问),在保证数据安全的...

  • JAVA-线程-一-执行器Executor

    2. JAVA-线程-二-ExecutorService 接口 3. JAVA-线程-三-AbstractExec...

网友评论

      本文标题:Java-多线程-ScheduledThreadPoolExec

      本文链接:https://www.haomeiwen.com/subject/dwjueltx.html