13.线程调度
前言
上一章节我们讲了线程池,那么下面来讲线程池的延时调度执行。
ScheduledExecutorService
一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
代码示例
import java.util.Random;
import java.util.concurrent.*;
/**
*
* 一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。
*
* 二、线程池的体系结构:
* java.util.concurrent.Executor : 负责线程的使用与调度的根接口
* |--**ExecutorService 子接口: 线程池的主要接口
* |--ThreadPoolExecutor 线程池的实现类
* |--ScheduledExecutorService 子接口:负责线程的调度
* |--ScheduledThreadPoolExecutor :继承 ThreadPoolExecutor, 实现 ScheduledExecutorService
*
* 三、工具类 : Executors
* ExecutorService newFixedThreadPool() : 创建固定大小的线程池
* ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
* ExecutorService newSingleThreadExecutor() : 创建单个线程池。线程池中只有一个线程
*
* ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。
*
* @author Aron.li
* @date 2020/11/4 21:41
*/
public class TestScheduled {
public static void main(String[] args) throws Exception {
//1.创建调度线程池 ScheduledExecutorService
ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
//2.使用线程池创建一个线程执行,并且延时调度
Future<Integer> result = pool.schedule(new Callable<Integer>(){
@Override
public Integer call() throws Exception {
int num = new Random().nextInt(100);//生成随机数
System.out.println(Thread.currentThread().getName() + " : " + num);
return num;
}
}, 1, TimeUnit.SECONDS); // 注意:时间单位是可以根据 TimeUnit.DAYS TimeUnit.DAYS 修改的。
//3.读取结果
System.out.println(result.get());
//4.关闭线程池
pool.shutdown();
}
}
执行效果如下:
原文始发于微信公众号(海洋的渔夫):13.线程调度
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/34924.html