nutz
nutz copied to clipboard
/org/nutz/lang/Tasks.java建议调整
多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。
//org.apache.commons.lang3.concurrent.BasicThreadFactory
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
//do something
}
},initialDelay,period, TimeUnit.HOURS);
https://github.com/nutzam/nutz/blob/master/src/org/nutz/lang/Tasks.java
哦, 改改?
哦, 改改?
想改 但这个代码 有点复杂 没看懂
@wangyuehong @ywjno @qinerg
是吗? 我测一下,我来改吧。
public static int num; private static void taskTest2() { ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build()); executorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { num++; if (num % 5 == 0) { System.out.println(num / (num - num)); } System.out.println(num); } }, 1, 1, TimeUnit.SECONDS); Lang.sleep(Long.MAX_VALUE); }
不行吧,同样执行5次后就终止了。 @TomYule TomYule