[英]Java: How to make a new thread every second
我在Java中有一个线程可以进行网络调用并存储检索到的信息,但是它仅检索该特定瞬间的信息。 我想在一段时间内每秒运行一次此线程,以更好地查看数据。 我怎样才能做到这一点? 我已经查看了ScheduledExecutorService,从我可以知道何时设置下一次运行时线程是否仍在运行,它一直等到第一个线程完成时,这不是我想要的。
您需要的是scheduleAtFixedRate方法: http : //docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang.Runnable,%20long,%20long, %20java.util.concurrent.TimeUnit)
当调度程序等到第一个线程完成时,这是因为您正在使用scheduleWithFixedDelay。
但是,如果您绝对希望线程同时运行,则应尝试以下操作:
pool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
pool.submit(myJob);
}
}, 1, 1, TimeUnit.SECONDS);
我建议始终使用游泳池。
您可以按照双重时间表进行操作。 使用scheduleWithFixedDelay()每秒设置一次作业。 这项工作将启动您真正要运行的方法。 这是一些基于Oracle ScheduledExecutorService API的代码。
Thread.sleep()可以模拟长时间运行的任务。
class Beeper {
public static void main(String[] args) {
(new Beeper()).beep();
}
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public void beep() {
final Runnable beeper = new Runnable() {
public void run() {
System.out.println("beep");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
final Runnable beeper2 = new Runnable() {
public void run() {
(new Thread(beeper)).start();
}
};
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper2, 1, 1, SECONDS);
}
}
那这个呢?
public static void main (String [] args) throws InterruptedException{
ExecutorService executorService =
Executors.newFixedThreadPool(10);
while (true){
executorService.submit(new Runnable() {
@Override
public void run() {
// do your work here..
System.out.println("Executed!");
}});
Thread.sleep(1000);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.