(CSDN 迁移) JAVA多线程实现

前几篇文章中分别介绍了

单线程化线程池(newSingleThreadExecutor)

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

可回收缓存线程池(newCachedThreadPool)

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

在JAVA文档的介绍

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize); 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。 参数:corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。 返回:新创建的安排线程池 需要注意的是,参数corePoolSize在这个方法中是没用意义的,详解见JAVA进阶----ThreadPoolExecutor机制。

具体实现:

1import java.util.concurrent.Executors; 2import java.util.concurrent.ScheduledExecutorService; 3import java.util.concurrent.TimeUnit; 4 5public class ThreadPoolByNewScheduledThreadPool { 6 7 public static void main(String[] args) { 8 9 Thread thread = new Thread(new Runnable() { 10 @Override 11 public void run() { 12 System.out.println(Thread.currentThread().getName() + " : 延迟3秒"); 13 } 14 }); 15 16 /** 17 * 定长线程池,支持定时及周期性任务执行 18 */ 19 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); 20 21 //延迟3s后运行 22 scheduledThreadPool.schedule(thread, 3, TimeUnit.SECONDS); 23 24 //首次执行延迟1s,每次间隔3秒 25 //scheduledThreadPool.scheduleAtFixedRate(thread, 1, 3, TimeUnit.SECONDS); 26 27 //每次执行结束,已固定时延开启下次执行 28 //scheduledThreadPool.scheduleWithFixedDelay(thread, 1, 3, TimeUnit.SECONDS); 29 30 System.out.println(Thread.currentThread().getName() + " : main thread"); 31 scheduledThreadPool.shutdown(); 32// try { 33// Thread.sleep(12000); 34// } catch (InterruptedException e) { 35// e.printStackTrace(); 36// } 37// scheduledThreadPool.shutdownNow(); 38 } 39 40}

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 面试知识点笔记(十三)多线程与并发

java线程池,利用Exceutors创建不同的线程池满足不同场景需求:1.newSingleThreadExecutor() 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。2.

多线程面试

多线程篇1.为什么要使用线程池tex避免频繁地创建和销毁线程,达到线程对象的重用。另外,使用线程池还可以根据项目灵活地控制并发的数目。2.java中如何获取到线程dump文件tex死循环、死锁、阻

JAVA多线程学习

Java通过Excutors提供四种线程池:newCachedThreadPool        创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool        创建一个定长线程,可控制线程最大并发数

(CSDN 迁移) JAVA多线程实现 - HelloWorld