我對傳統的線程實現很熟悉,但對Executorservice不太確定。使用executor服務處理線程時,我知道這非常方便。但是我對它的實現有點混淆。Executorservice如何在java中工作?
我們假設我有一個父線程/主線程和一個具有最大線程池大小爲10的執行程序服務。現在,我只想在jms隊列上執行某個任務,只要它的大小小於1000。我大概可以考慮以兩種方式來實現這一點。
案例1:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
threadPoolTaskExecutor.execute(this);
++checkQueueSize;
}
}
}
public void run(){
jmsQueue.pushMessage("Hello Thread");
}
}
案例2:
class MyThreadClass inmplements Runnable {
public static void main(String args[]){
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskExecutor.execute(this);
}
public void run(){
while(true){
int checkQueueSize = jmsQueue.getSize();
while(checkQueueSize<1000){
jmsQueue.pushMessage("Hello Thread");
++checkQueueSize;
}
}
}
}
我的理解是情況下2不會跨越多個線程。我正確與否?還是有其他方式來執行任務?
'setWaitForTasksToCompleteOnShutdown'是Spring框架的一部分 - 你在這方面要求? – assylias
是的。但如果有任何其他方式,這是非常受歡迎的。 – Satyaprakash
如果局部變量checkQueueSize小於或等於1000,那麼'while(checkQueueSize <= 1000)'語句將永遠循環。循環中的任何內容都不可能更改變量的值。 –