我試圖與pool.shutdown()和pool.awaitTermination(0,TimeUnit.SECONDS),但它並不真正希望等待的任務做它打印在我之前加入方法它已完成。我究竟做錯了什麼。順便說一句:游泳池本身是我迄今爲止多任務處理所看到的最好的東西。很高興我在這裏找到了!帶有像CountDownLatch這樣的信號的解決方案似乎並不是最常用的方法......我正在尋找更多像join方法那樣的東西,因爲它是針對線程實現的。Groovy的併發執行,等待終止像線程
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger
import groovy.transform.Synchronized
import java.util.concurrent.*
class myThread extends Thread{
Integer timer=0
Integer count=0
String tn=''
String status=''
def counter = new AtomicInteger()
def void run() {
println tn+' started ---- !!! ----'
status='running'
for(i in 1..count) {
sleep timer
println tn+" Doing something loop $i"
counter.incrementAndGet()
}
println tn+' finished - ### -'
status='ok'
this.join()
}
}
def queue=[]
def mt1=new myThread(timer:550,count:10,tn:'t1',status:'')
def mt2=new myThread(timer:530,count:6,tn:'t2',status:'')
def mt3=new myThread(timer:550,count:10,tn:'t3',status:'')
def mt4=new myThread(timer:500,count:6,tn:'t4',status:'')
queue.push(mt1)
queue.push(mt2)
queue.push(mt3)
queue.push(mt4)
def maxConcurrent=2
def pool = Executors.newFixedThreadPool(maxConcurrent)
queue.each(){
pool.submit(it)
}
pool.shutdown()
pool.awaitTermination(0, TimeUnit.SECONDS);
// HOW DO I WAIT HERE???
println 'NOW its REALLY!!! finished!'
非常感謝,這正是該解決方案,並與偉大工程我擴展Thread。謝謝!!! – Booyeoo 2012-02-17 09:21:58
讓你的對象成爲線程服務沒有任何用處,我希望他們只是實現Runnable。這並不是什麼大不了的事情,因爲你沒有啓動線程,但它確實有開銷。 – 2012-02-17 15:41:57