Executors.newSingleThreadScheduledExecutor();线程池中放入多个线程问题
来源:互联网 发布:东风41知乎 编辑:程序博客网 时间:2024/06/07 09:44
import java.util.Date;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicLong;/** * Created by LiChao on 2017/9/29 */public class Test3 { private static long start = new Date().getTime(); private static final ScheduledExecutorService excutor = Executors.newSingleThreadScheduledExecutor(); public static void main(String[] args) { Thread thread1 = new Thread(() -> { long end = new Date().getTime(); System.out.println("time wait:"+(end-start)+",this is 线程1"); },"线程1"); Thread thread2 = new Thread(() -> { long end = new Date().getTime(); System.out.println("time wait:"+(end-start)+",this is 线程2"); },"线程2"); Thread thread3 = new Thread(() -> { long end = new Date().getTime(); System.out.println("time wait:"+(end-start)+",this is 线程3"); },"线程3"); excutor.scheduleWithFixedDelay(thread1,0, 1 , TimeUnit.SECONDS); excutor.scheduleWithFixedDelay(thread2,0, 2 , TimeUnit.SECONDS); excutor.scheduleWithFixedDelay(thread3,0, 3 , TimeUnit.SECONDS); }}
输出结果:
time wait:80,this is 线程1time wait:80,this is 线程2time wait:80,this is 线程3time wait:1088,this is 线程1time wait:2081,this is 线程2time wait:2089,this is 线程1time wait:3081,this is 线程3time wait:3090,this is 线程1time wait:4082,this is 线程2time wait:4091,this is 线程1time wait:5092,this is 线程1time wait:6082,this is 线程3time wait:6083,this is 线程2time wait:6093,this is 线程1time wait:7094,this is 线程1time wait:8084,this is 线程2time wait:8095,this is 线程1time wait:9083,this is 线程3time wait:9095,this is 线程1
线程池executor调用scheduleWithFixedDelay方法,同时放入三个不同调度的线程。从结果中可以看出每个线程按照自己的调度互不干扰的运行。此时修改线程2加一个阻塞再看看运行结果。
Thread thread2 = new Thread(() -> { long end = new Date().getTime(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("time wait:"+(end-start)+",this is 线程2"); },"线程2");
运行结果:
time wait:129,this is 线程1time wait:130,this is 线程2time wait:3130,this is 线程3time wait:3130,this is 线程1time wait:4131,this is 线程1time wait:5131,this is 线程2time wait:8131,this is 线程1time wait:8131,this is 线程3time wait:9132,this is 线程1time wait:10132,this is 线程2time wait:13132,this is 线程1time wait:13132,this is 线程3time wait:14133,this is 线程1time wait:15133,this is 线程2time wait:18133,this is 线程1time wait:18133,this is 线程3time wait:19134,this is 线程1time wait:20134,this is 线程2time wait:23142,this is 线程1time wait:23142,this is 线程3
从结果中可以看出,当线程2被阻塞时,其它的线程也被阻塞不能运行。所以使用Executors.newSingleThreadScheduledExecutor()来创建线程池同时放入多个线程时,每个线程都会按照自己的调度来执行,但是当其中一个线程被阻塞时,其它的线程都会受到影响被阻塞,不过依然都会按照自身调度来执行,但是会存在阻塞延迟。
阅读全文
0 0
- Executors.newSingleThreadScheduledExecutor();线程池中放入多个线程问题
- Executors.newSingleThreadScheduledExecutor()
- 线程池中Executors应用(一)
- Java Executors(线程池)
- java Executors(线程池)
- Java Executors(线程池)
- Executors 和线程池
- Java Executors(线程池)
- Executors 与线程池
- Executors线程池--java
- 线程池 Executors 入门
- Java Executors(线程池)
- java Executors线程池
- Java线程池Executors
- 线程池 Executors
- Java Executors(线程池)
- Executors 线程池
- Java Executors(线程池)
- 网狐棋牌 权位过滤
- TCP连接
- 百度贴吧(新浪微博)个人主页效果(附带一个超轻量级可自定义的侧滑删除的layout)
- C++内置数组和array的比较
- eclipse tomcat debug不能进入断点
- Executors.newSingleThreadScheduledExecutor();线程池中放入多个线程问题
- HDOJ 1715 大菲波数(大数)
- django添加新的adnim时报错:django Cannot add or update a child row: a foreign key constraint fails (`mxonlin
- springboot 执行定时任务
- IDEA破解 2017 IDEA license server 激活(可用)
- C#读写文件时出现占用的解决办法
- adb操作指令
- 字典树学习与使用
- Spring Boot 集成MyBatis