gpt4 book ai didi

java - 我想每隔1秒定期启动一个任务,无论先前的任务是否以

转载 作者:行者123 更新时间:2023-12-03 13:09:53 25 4
gpt4 key购买 nike

我想每隔1秒钟定期运行一个任务,而不管先前的任务是否结束。我尝试下面的代码,但它不能正常工作
完成上一个任务,然后开始另一个任务。

public static void main(String[] args) throws Exception {
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(5);
scheduledPool.scheduleAtFixedRate(new Runnable(){
public void run(){
System.out.println(Thread.currentThread().getName() + "startTime : "+ new Date());
sleepForNSeconds(5);
System.out.println(Thread.currentThread().getName() +"endTime : "+ new Date());
}
}, 0,1, TimeUnit.SECONDS);

}

输出:
pool-1-thread-1startTime : Wed Jul 06 21:04:15 IST 2016
pool-1-thread-1endTime : Wed Jul 06 21:04:21 IST 2016
pool-1-thread-1startTime : Wed Jul 06 21:04:21 IST 2016
pool-1-thread-1endTime : Wed Jul 06 21:04:26 IST 2016
pool-1-thread-2startTime : Wed Jul 06 21:04:26 IST 2016

请建议我应该使用哪种API来实现此目的。我希望无论是否完成,startTime应该每1秒打印一次。

如果coreSize是5,那么当5个线程已经在工作时,如果需要,可以创建多少个新线程ScheduledExecutorService?

注意:我也尝试了Timer类的scheduleAtFixedRate api,但这也不能解决我的目的。

最佳答案

下面是我的方法。请提出是否有更好的方法。

public static void main(String[] args) throws Exception {
while(true){
sleepForNSeconds(1);
new Thread(new Test().new Mytask()).start();
}

}

class Mytask implements Runnable {

public void run() {
System.out.println(Thread.currentThread().getName()
+ " startTime : " + new Date());
sleepForNSeconds(5);
System.out.println(Thread.currentThread().getName() + " endTime : "
+ new Date());
}
}
输出:
Thread-0 startTime : Wed Jul 06 21:41:47 IST 2016
Thread-1 startTime : Wed Jul 06 21:41:48 IST 2016
Thread-2 startTime : Wed Jul 06 21:41:49 IST 2016
Thread-3 startTime : Wed Jul 06 21:41:50 IST 2016
Thread-4 startTime : Wed Jul 06 21:41:51 IST 2016
Thread-0 endTime : Wed Jul 06 21:41:53 IST 2016
Thread-5 startTime : Wed Jul 06 21:41:53 IST 2016
Thread-1 endTime : Wed Jul 06 21:41:54 IST 2016

关于java - 我想每隔1秒定期启动一个任务,无论先前的任务是否以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38228194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com