2015-12-22 70 views
1

我有能力在我的應用程序中使用多個服務器。並且對於每臺服務器,我需要從服務器獲取一些信息,並在一秒鐘內將其解析爲線程。使用ScheduledExecutorService同時運行多個線程

如何啓動多個RunnableScheduledExecutorService?我是否應該爲每個線程使用獨佔執行程序,或者我可以使用一個執行程序實例並將它傳遞給每個需要每秒運行的運行程序?

回答

1

看來你要找的是什麼ScheduledExecutorService#scheduleAtFixedRate()

與特定時期創建並執行在給定初始延遲後首次啓用的定期操作,隨後,即執行initialDelay,然後initialDelay+period,然後initialDelay + 2 * period,依此類推。

這裏有一個簡單的例子:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(NUMBER_OF_THREADS); 
executor.scheduleAtFixedRate(new Runnable() { 

    @Override 
    public void run() { 
     // runnable logic   
    } 
}, 0, 1, TimeUnit.SECONDS); 

您應該使用應用程序中的一個ExecutorService。有關該方法的更多信息,請參閱Javadocs。

+0

每秒我需要爲每個服務器運行'FetchInfoRunnable'。例如,我有4臺服務器,所以我需要每秒運行4個線程。所以我需要運行'executor.scheduleAtFixedRate(新的FetchInfoRunnable(服務器),0,1,TimeUnit.SECONDS)'4次? – Neka

+0

是每個服務器都有一個計劃。 – manouti

相關問題