前几篇文章中分别介绍了

单线程化线程池(newSingleThreadExecutor)

可控最大并发数线程池(newFixedThreadPool)

可回收缓存线程池(newCachedThreadPool)

newScheduledThreadPool用于构造安排线程池,能够根据需要安排在给定延迟后运行命令或者定期地执行。

在JAVA文档的介绍

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize);

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

参数:corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。

返回:新创建的安排线程池

需要注意的是,参数corePoolSize在这个方法中是没用意义的,详解见JAVA进阶----ThreadPoolExecutor机制。

具体实现:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; public class ThreadPoolByNewScheduledThreadPool { public static void main(String[] args) { Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " : 延迟3秒");
}
}); /**
* 定长线程池,支持定时及周期性任务执行
*/
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); //延迟3s后运行
scheduledThreadPool.schedule(thread, 3, TimeUnit.SECONDS); //首次执行延迟1s,每次间隔3秒
//scheduledThreadPool.scheduleAtFixedRate(thread, 1, 3, TimeUnit.SECONDS); //每次执行结束,已固定时延开启下次执行
//scheduledThreadPool.scheduleWithFixedDelay(thread, 1, 3, TimeUnit.SECONDS); System.out.println(Thread.currentThread().getName() + " : main thread");
scheduledThreadPool.shutdown();
// try {
// Thread.sleep(12000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// scheduledThreadPool.shutdownNow();
} }

后面注释掉的内容表示强制程序最大执行实际为12s,这通常是不切实际的,常常会需要在线程中设置标志位或标记系统时间来获取程序的终止时间。这就涉及到获取线程返回值的问题。将在后续文章中进行介绍。

(CSDN 迁移) JAVA多线程实现-支持定时与周期性任务的线程池(newScheduledThreadPool)的更多相关文章

  1. (CSDN迁移)JAVA多线程实现-单线程化线程池newSingleThreadExecutor

    JAVA通过Executors提供了四种线程池,单线程化线程池(newSingleThreadExecutor).可控最大并发数线程池(newFixedThreadPool).可回收缓存线程池(new ...

  2. java多线程(三)-Executors实现的几种线程池以及Callable

    从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...

  3. (CSDN 迁移) JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

    在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor).可控最大并发数线程池(newFixedThreadPool).下面介绍的是第三种newCachedThreadPo ...

  4. (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)

    上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...

  5. (CSDN迁移) JAVA多线程实现-实现Runnable接口

    实现Runnable接口  implements Runnable 重写run()方法 @Override public void run(){//TODO} 创建线程对象: Thread threa ...

  6. (CSDN迁移)JAVA多线程实现-继承Thread

    继承Thread方法: extends Thread 重写覆盖run()方法: @Override public void run() 通过start()方法启动线程. threadDemo01.st ...

  7. Java多线程高并发学习笔记(三)——深入理解线程池

    线程池最核心的一个类:ThreadPoolExecutor. 看一下该类的构造器: public ThreadPoolExecutor(int paramInt1, int paramInt2, lo ...

  8. “全栈2019”Java多线程第十五章:当后台线程遇到finally

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. “全栈2019”Java多线程第四章:设置和获取线程名称

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. Windows Automation API和自动化测试

    https://zhuanlan.zhihu.com/p/22083601\ 感谢轮子哥点赞,这会儿消息扎堆过来了,轮带逛果然不是随便说说的…… 第二篇一个简单的Windows Automation ...

  2. ajax请求数据时,get和post的区别

    发送机制 1.get请求会将参数跟在URL后面进行参数传递,而post请求则是作为http消息的实体内容发送给web服务器: 2.get提交的数据限制是1024字节,这种显示是来自特定浏览器和服务器对 ...

  3. Insecure Code Management

    Insecure Code Management-------------不安全的代码管理 Get the password (in clear text) from the admin accoun ...

  4. JS的ES6的class

    1.类的创建: 定义类 类的构造函数 类的静态方法 类的一般属性和方法 //定义类 class Person{ // 类的静态方法,相当于Person.test = function(){consol ...

  5. 部署django到服务器

    部署 服务器环境配置 在本地的虚拟环境中,项目根目录下,执行命令收集所有的包 pip freeze > plist.txt 安装并创建虚拟环境,如已创建则跳过此步 sudo apt-get in ...

  6. Comet OJ - Contest #15 题解

    传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ sc ...

  7. nginx 反向代理之 proxy_buffering

    proxy_buffering主要是实现被代理服务器的数据和客户端的请求异步. 为了方便理解,我们定义三个角色,A为客户端,B为代理服务器,C为被代理服务器. 当proxy_buffering开启,A ...

  8. Hotspot对象的内存布局

    对象头 class oopDesc { ... private: volatile markOop _mark; union _metadata { Klass* _klass; narrowKlas ...

  9. UDP丢包原因总结

    丢包检查方法 给每个UDP包编号,对比收发端的接收到的包.对于UDP协议层上的包,例如RTP包,可以从RTP包中读出包的序列号进行判断. 抓包.发送端和接收端分别抓包.linux下可以使用tcpdum ...

  10. win101903版本vmware 14虚拟机插usb设备卡死

    win101903版本vmware 14虚拟机插usb设备卡死 问题的环境: win10,1903版本: vmware 14 版本: 安装的是ubuntu1604虚拟机: 当插入usb摄像头,并连接到 ...