簡體   English   中英

Java:如何每秒創建一個新線程

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM