nutz icon indicating copy to clipboard operation
nutz copied to clipboard

/org/nutz/lang/Tasks.java建议调整

Open TomYule opened this issue 4 years ago • 5 comments

多线程并行处理定时任务时,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

TomYule avatar Sep 09 '19 08:09 TomYule

哦, 改改?

wendal avatar Sep 10 '19 01:09 wendal

哦, 改改?

想改 但这个代码 有点复杂 没看懂

TomYule avatar Sep 10 '19 01:09 TomYule

@wangyuehong @ywjno @qinerg

TomYule avatar Oct 08 '19 02:10 TomYule

是吗? 我测一下,我来改吧。

qinerg avatar Nov 11 '19 11:11 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

qinerg avatar Nov 12 '19 09:11 qinerg