Executors中的几种线程调用方式
一、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中的几种线程调用方式相关推荐
- java中创建两种线程的方式_java中创建线程的两种方式有什么区别?
*** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...
- Android中的5种数据存储方式
Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...
- java按钮权限控制_详解Spring Security 中的四种权限控制方式
Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...
- PG中的几种数据类型转换方式
PG中的几种数据类型转换方式 1.通过格式化函数进行转换 函数 返回类型 描述 示例 to_char(timestamp,text) text 把时间戳转换成字符串 to_char(current_t ...
- 通读《C++ primer plus》— C++中的5种数据类型转换方式
通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...
- java中的json_JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- Java 中的几种线程池,你之前用对了吗,互联网 面试官 如何面试
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 好久 ...
- Javascript中匿名函数的多种调用方式
avascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被 ...
- Executors创建的4种线程池的使用
Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程. newFi ...
最新文章
- 挨踢人生路--记我的10年18家工作经历 - 后记
- Exchange 2007 内存使用问题
- querybuilder 排序_elasticsearch的匹配与排序问题
- POJ 3154 Graveyard【多解,数论,贪心】
- jggrid 设置了自适应宽度仍然有滚动条的问题
- 孤独的个人在社会中生存应掌握的基本健康技能(个人分析)
- c语言数据类型简介表格,C语言基本数据类型简介.docx
- 创建一个MDK工程模板
- NOAA气象日监测数据均值计算python代码整理
- java根据ip获取定位(实用粗略定位)
- 陈越微博c语言自学攻略,数据结构自学攻略
- Hbase的应用场景及特点
- udal导mysql_MySQL性能测试工具之mysqlslap
- MyBatis一对多,多对一,多对多
- android动画知乎,GitHub - ryanhoo/Zhihu-Parallax-Animation: 知乎 Android 客户端启动页的视差动画效果实现...
- python-docx 中文个人翻译
- Android 科大讯飞开发相关
- afudos备份bios不动_救命宝典:BIOS刷坏后的恢复方法
- 学习视频剪辑整理和所感
- 敏捷守破离:20%-200%-1200%的改善