[英]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.