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

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

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

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

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

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

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

  public static void doTask(){
ExecutorService executorService = Executors.newFixedThreadPool();
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、效果(这里除了调度任务外其他的都只执行一次)

效果基本上就是这样

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

最新文章

  1. Java 8中一些常用的全新的函数式接口
  2. ubuntu 下创建桌面快捷方式
  3. java基础之:堆排序
  4. H264码流打包分析(精华)
  5. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
  6. 学习 easyui 之二:jQuery 的 ready 函数和 easyloader 的加载回调函数
  7. drupal7 sql接口笔记
  8. [Oracle]LogMiner工具小结
  9. 第二次项目冲刺(Beta阶段)5.21
  10. Nokia大事录
  11. JFrame图形界面 ----绝对布局和按钮
  12. service docker start后docker stop/waiting的解决方法
  13. JavaScript易错知识点整理[转]
  14. AI人工智能顶级实战工程师 课程大纲
  15. cs特征性以及数据库的连接
  16. 解决Windows10或者其他版本Windows Update报错的问题
  17. java 使用反射在dto和entity 实体类之间进行转换
  18. 题解——Codeforces Round #507 (based on Olympiad of Metropolises) T2(模拟)
  19. word中的交叉引用
  20. linux离线部署redis及redis.conf详解

热门文章

  1. Nginx + LUA下流量拦截算法
  2. 一个轻量级分布式 RPC 框架 — NettyRpc
  3. Tensorflow1.5.0+cuda9.0+cudnn7.0+gtx1080+ubuntu16.04
  4. 在MyEclise中使用自己安装的tomcat
  5. JavaScript--语法2--语句结构
  6. 秒转为时分秒格式js
  7. zoj3261变形并查集
  8. 如何高效利用 GitHub
  9. Collections中的各种方法
  10. 简单地为DBNavigator填加Caption