Timer特点:

 
1、一个Timer只占用一个线程
timer有多个timerTask的情况,如果一个timerTask有执行时间过长,其它的timerTask就会被耽误
2、如果TimerTask抛出未检查的异常,Timer会由于该异常导致中断。后续的TimerTask任务也不会执行
示例:
 import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class TimerTest extends TimerTask { private String jobName = "" ; public TimerTest(String jobName) {
super();
this.jobName = jobName;
} int count = 0; @Override
public void run() {
System. out.println(jobName + " " + new Date() + " beep " + (++count));
try {
if (jobName .equals("job1" )) {
Thread. sleep(1000);
throw new RuntimeException();
} } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) {
Timer timer = new Timer();
long period = 2000;
// 从现在开始 1 秒钟之后,每隔 2秒钟执行一次 job1
timer.schedule( new TimerTest("job1" ), 0, period);
// 每隔 2 秒钟执行一次 job2
timer.schedule( new TimerTest("job2" ), 0, period);
}
}
执行结果
job1 Tue Apr 08 23:37:17 CST 2014 beep 1
Exception in thread "Timer-0" java.lang.RuntimeException
at TimerTest.run( TimerTest.java:20)
at java.util.TimerThread.mainLoop( Timer.java:512)
at java.util.TimerThread.run( Timer.java:462)
ScheduledExecutorService(实现类ScheduledThreadPoolExecutor)特点:
1、ScheduledExecutorService是多线程
只要线程池不设置为1,每个线程任务都能按照各自的频率执行。
2、如果线程任务抛出未检查的异常,ScheduledExecutorService只是中断该线程任务,其它任务正常执行
示例:
 import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture; public class TestScheduledThread extends TimerTask { private String jobName = "" ; public TestScheduledThread(String jobName) {
super();
this.jobName = jobName;
} int count = 0; @Override
public void run() {
System. out.println(jobName + " " + new Date() + " beep " + (++count));
try {
if (jobName .equals("job1" )) {
Thread. sleep(1000);
throw new RuntimeException();
} } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) {
final ScheduledExecutorService scheduler = Executors
. newScheduledThreadPool(2);
//每隔2秒运行一次
final ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate(
new TimerTest("job1" ), 0, 2, SECONDS);
//每隔2秒运行一次
final ScheduledFuture beeperHandle2 = scheduler.scheduleAtFixedRate(
new TimerTest("job2" ), 0, 2, SECONDS);
}
}
 
执行结果:
job2 Tue Apr 08 23:42:58 CST 2014 beep 1
job1 Tue Apr 08 23:42:58 CST 2014 beep 1
job2 Tue Apr 08 23:43:00 CST 2014 beep 2
job2 Tue Apr 08 23:43:02 CST 2014 beep 3
job2 Tue Apr 08 23:43:04 CST 2014 beep 4
job2 Tue Apr 08 23:43:06 CST 2014 beep 5
job2 Tue Apr 08 23:43:08 CST 2014 beep 6

Timer和ScheduledExecutorService区别的更多相关文章

  1. 任务调度的方式:Timer、ScheduledExecutorService、spring task、quartz、XXL-JOB、Elastic-Job

    任务调度 定时任务调度:基于给定的时间点.给定的时间间隔.给定的执行次数自动执行的任务. Timer 介绍 Timer,简单无门槛,一般也没人用. Timer位于java.util包下,其内部包含且仅 ...

  2. java定时任务Timer与ScheduledExecutorService<转>

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. ...

  3. Java 多线程之Timer与ScheduledExecutorService

    1.Timer管理延时任务的缺陷 a.以前在项目中也经常使用定时器,比如每隔一段时间清理项目中的一些垃圾文件,每个一段时间进行数据清洗:然而Timer是存在一些缺陷的,因为Timer在执行定时任务时只 ...

  4. Timer与ScheduledExecutorService间的抉择

    java.util.Timer计时器有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务").但是,Timer存在一 ...

  5. 【高并发】ScheduledThreadPoolExecutor与Timer的区别和简单示例

    JDK 1.5开始提供ScheduledThreadPoolExecutor类,ScheduledThreadPoolExecutor类继承ThreadPoolExecutor类重用线程池实现了任务的 ...

  6. 实例分析Scheduled Thread Pool Executor与Timer的区别

    摘要:JDK 1.5开始提供Scheduled Thread PoolExecutor类,Scheduled Thread Pool Executor类继承Thread Pool Executor类重 ...

  7. C#中Timer使用及解决重入问题

    C#中Timer使用及解决重入问题 ★介绍 首先简单介绍一下timer,这里所说的timer是指的System.Timers.timer,顾名思义,就是可以在指定的间隔是引发事件.官方介绍在这里,摘抄 ...

  8. java Timer 使用小结

    Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务.这种方式可以让程序按照某一个频度执行,但不能指定时间运行.用的较少. 任务的调用通过起的子线程进 ...

  9. Java Timer及TimerTarsk(摘自网络)

    Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务. 这种方式可以让程序按照某一个频度执行,但不能指定时间运行.用的较少.任务的调用通过起的子线程进 ...

随机推荐

  1. String和StringBuffer的机制差别

    String是不可变的,StringBuffer是可变的:StringBuffer是线程安全的,StringBuilder是非线程安全的. 因而在大部分情况下字符串的拼接速度为:StringBuild ...

  2. 【强联通分量缩点】【最短路】【spfa】bzoj1179 [Apio2009]Atm

    缩点后转化成 DAG图上的单源最长路问题.spfa/dp随便. #include<cstdio> #include<queue> #include<algorithm&g ...

  3. [HDU6252]Subway Chasing

    题目大意: 一条直线上有n个点,两个人在直线上走,保持x的距离. 告诉你m条信息,告诉你一个人在ab之间时,另一个人在cd之间. 问这些信息是否矛盾,如果不矛盾,求相邻两点之间的最小距离. 思路: m ...

  4. 十. 图形界面(GUI)设计9.列表和组合框

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...

  5. ToggleButton控件,Switch控件

    (一) 1.效果图    2. activity_main.xml <?xml version="1.0" encoding="utf-8"?> & ...

  6. 130804组队练习赛ZOJ校赛

    A.Ribbon Gymnastics 题目要求四个点作圆,且圆与圆之间不能相交的半径之和的最大值.我当时想法很简单,只要两圆相切,它们的半径之和一定最大,但是要保证不能相交的话就只能取两两个点间距离 ...

  7. YS端对端之间SSL通信安全问题

    1.简介:          传统的互联网,SSL通信主要基于客户端和服务器之间,在物联网时代,端和端之间的加密通信将变得很普遍,在YS业务中主要的端和端通信为: (1).客户端(移动APP,YS工作 ...

  8. 使用原生JS进行字符串转对象

    字符串转对象 目的 工作中如果需要原生 JS 完成字符转对象的话可以通过 JSON.parse(str), 但是这个方法是ES5中才出现, 如果需要兼容低版本就需要其它方法 使用原生 JS 解决字符串 ...

  9. net core 踩坑

    1.压缩静态文件,要nuget  BuildBundlerMinifier 2.DI 自动注入 添加了两个类,才能完成 3.所有静态文件必须放在wwwroot下,不然访问不到 4.ajax 提交Typ ...

  10. 科研不是比赛,而是一种对未知和完美的自我追求——跟邢波(Eric Xing)面对面聊科研

    编者按:6月26日,2014年国际机器学习大会(ICML)在北京国际会议中心完美落幕.作为机器学习领域两大顶尖年会之一,这是 ICML大会30多年来首次来到中国和远东,在国内的机器学习界震动不小.身为 ...