欢迎来到天天文库
浏览记录
ID:34416431
大小:98.50 KB
页数:10页
时间:2019-03-05
《executorservice取代timer》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《Java并发编程实战》一书提到的用ExecutorService取代JavaTimer有几个理由,我认为其中最重要的理由是:如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。stackoverflow上也有关于此问题的讨论:http://stackoverflow.com/que
2、stions/409932/java-timer-vs-executorserviceTimer的问题:Java代码1packagecom.ljn.timer;23importjava.util.Date;4importjava.util.Timer;56/**7*@authorlijinnan8*@date:2013-11-25下午3:27:439*/10publicclassTimerException{1112publicstaticvoidmain(String[]args){1System.out.println("start:"+newDate());2T
3、imertimer=newTimer();3intdelay=1000;4intperiod=2000;5timer.schedule(newOKTask(),delay*2,period);//"OKTask"doesnotgetchancetoexecute6timer.schedule(newErrorTask(),delay,period);//exceptionin"ErrorTask"willterminatetheTimer7}89/*输出:10start:MonNov2517:49:53CST201311ErrorTaskisexecuting...1
4、2error:MonNov2517:49:55CST201313Exceptioninthread"Timer-0"java.lang.RuntimeException:somethingwrong14atcom.ljn.timer.ErrorTask.run(ErrorTask.java:14)15*/1617}用ExecutorService则正常:Java代码1packagecom.ljn.timer;23importjava.util.Date;4importjava.util.concurrent.Executors;5importjava.util.con
5、current.ScheduledExecutorService;6importjava.util.concurrent.TimeUnit;78/**9*@authorlijinnan10*@date:2013-11-25下午3:35:3911*/12publicclassScheduledExecutorServiceTest{1314publicstaticScheduledExecutorServicescheduledExecutorService=Executors.newScheduledThreadPool(2);1516publicstaticvoid
6、main(String[]args){17System.out.println("start:"+newDate());18ErrorTaskerrorTask=newErrorTask();19OKTaskokTask=newOKTask();20intdelay=1000;1intperiod=2000;2scheduledExecutorService.scheduleAtFixedRate(errorTask,delay,period,TimeUnit.MILLISECONDS);//"ErrorTask"throwsExceptionandthenstope
7、s.3scheduledExecutorService.scheduleAtFixedRate(okTask,delay*2,period,TimeUnit.MILLISECONDS);//"OKTask"isexecutedperiodically,notaffectedby"ErrorTask"45//scheduledExecutorService.shutdown();6}78/*9start:MonNov2517:54:22CST201310ErrorTaskisexecuting...11erroroccurs:MonNov2517:54
此文档下载收益归作者所有