一、Executors是java5以后提供的一套api,使用跟上面非常方便。Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。

二、这里介绍Executors的4中线程池的用法

1、newScheduledThreadPool(这种方式支持定时调度的方式,可以控制后台对于任务调度时间的把控)

  public static void initTask(){ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);scheduledExecutorService.scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("任务初始化======================任务初始化");System.out.println(new Date());}},1,1,TimeUnit.MINUTES);}

这里参数的是开始延迟1分钟执行,间隔时间1分钟,时间单元分钟。

调度线程的方式适用于,正对于某些业务需要定时的去执行使用。

2、newFixedThreadPool(这个是固定的线程池,可以设定固定的线程数)

  public static void doTask(){ExecutorService executorService = Executors.newFixedThreadPool(1);executorService.execute(new Runnable() {public void run() {System.out.println("做任务=====================做任务");}});}

这种线程只适用于单个任务或者需要多线程来支持的方式,因为线程池的数量是固定的,可以根据自己的需要提取使用

3、newCachedThreadPool(这个方式比较灵活,缓存线程池。可以及时使用,及时回收,能够起到很好的保护作用)

  public static void cacheTask(){ExecutorService executorService = Executors.newCachedThreadPool();executorService.execute(new Runnable() {public void run() {System.out.println("缓存任务=====================缓存任务");}});}

4、newSingleThreadExecutor(这个方式相对简单,用于单线程的使用)

  public static void singleTask(){ExecutorService executorService = Executors.newSingleThreadExecutor();executorService.execute(new Runnable() {public void run() {System.out.println("单线程任务=====================单线程任务");}});}

上面几种方式就是Executors的使用

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

三、我这里实现4中方式,效果是

1、项目启动开始执行

@Component
public class ScheduleUtil implements ApplicationListener<ContextRefreshedEvent> {public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {if (contextRefreshedEvent.getApplicationContext().getParent() == null) {System.out.println("开始任务======================开始任务");ScheduleTask.startTask();System.out.println("执行任务======================执行任务");}}
}

2、实现4中方式

public class ScheduleTask {public static void startTask(){System.out.println("任务触发======================任务触发");initTask();doTask();cacheTask();singleTask();}public static void initTask(){ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);scheduledExecutorService.scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("任务初始化======================任务初始化");System.out.println(new Date());}},1,1,TimeUnit.MINUTES);}public static void doTask(){ExecutorService executorService = Executors.newFixedThreadPool(1);executorService.execute(new Runnable() {public void run() {System.out.println("做任务=====================做任务");}});}public static void cacheTask(){ExecutorService executorService = Executors.newCachedThreadPool();executorService.execute(new Runnable() {public void run() {System.out.println("缓存任务=====================缓存任务");}});}public static void singleTask(){ExecutorService executorService = Executors.newSingleThreadExecutor();executorService.execute(new Runnable() {public void run() {System.out.println("单线程任务=====================单线程任务");}});}
}

3、效果(这里除了调度任务外其他的都只执行一次)

效果基本上就是这样

上述的内容仅供参考!!!!!!!!!!

转载于:https://www.cnblogs.com/ll409546297/p/7238471.html

Executors中的几种线程调用方式相关推荐

  1. java中创建两种线程的方式_java中创建线程的两种方式有什么区别?

    *** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...

  2. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  3. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  4. PG中的几种数据类型转换方式

    PG中的几种数据类型转换方式 1.通过格式化函数进行转换 函数 返回类型 描述 示例 to_char(timestamp,text) text 把时间戳转换成字符串 to_char(current_t ...

  5. 通读《C++ primer plus》— C++中的5种数据类型转换方式

    通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...

  6. java中的json_JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  7. Java 中的几种线程池,你之前用对了吗,互联网 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 好久 ...

  8. Javascript中匿名函数的多种调用方式

    avascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被 ...

  9. Executors创建的4种线程池的使用

    Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程. newFi ...

最新文章

  1. 挨踢人生路--记我的10年18家工作经历 - 后记
  2. Exchange 2007 内存使用问题
  3. querybuilder 排序_elasticsearch的匹配与排序问题
  4. POJ 3154 Graveyard【多解,数论,贪心】
  5. jggrid 设置了自适应宽度仍然有滚动条的问题
  6. 孤独的个人在社会中生存应掌握的基本健康技能(个人分析)
  7. c语言数据类型简介表格,C语言基本数据类型简介.docx
  8. 创建一个MDK工程模板
  9. NOAA气象日监测数据均值计算python代码整理
  10. java根据ip获取定位(实用粗略定位)
  11. 陈越微博c语言自学攻略,数据结构自学攻略
  12. Hbase的应用场景及特点
  13. udal导mysql_MySQL性能测试工具之mysqlslap
  14. MyBatis一对多,多对一,多对多
  15. android动画知乎,GitHub - ryanhoo/Zhihu-Parallax-Animation: 知乎 Android 客户端启动页的视差动画效果实现...
  16. python-docx 中文个人翻译
  17. Android 科大讯飞开发相关
  18. afudos备份bios不动_救命宝典:BIOS刷坏后的恢复方法
  19. 学习视频剪辑整理和所感
  20. 敏捷守破离:20%-200%-1200%的改善

热门文章

  1. [20150123]热链竞争.txt
  2. eligius矿池设置
  3. 美国商务部发布软件物料清单 (SBOM) 的最小元素(中)
  4. Linux OS 曝新漏洞 攻击者可在多数发行版获root 权限
  5. idea 常用配置和快捷键
  6. 经实验效果显著!VR虚拟帮助病人重新走路
  7. ES6 中 class 和 extends 的es5实现
  8. 洛谷 1541 乌龟棋——dp
  9. 中国首个 SaaS 模式的云告警平台 iOS 版 APP 上线
  10. 文字垂直居中,水平居中 a标签水平居中只要给他的父级设置text-align=center