Я попробовал это с pool.shutdown() и pool.awaitTermination (0, TimeUnit.SECONDS), но он действительно не хочет ждать выполнения задач, прежде чем он меня отпечатает что он закончил. Что я делаю не так. Кстати: сам пул - это лучшее, что я видел для многозадачности до сегодняшнего дня. Рад, что я нашел его здесь !!! Решение с такими сигналами, как CountDownLatch, похоже, не является самым лучшим способом ... Я ищу больше для чего-то вроде метода join, поскольку он реализован для Threads.Groovy concurrency executor ожидает завершения, как метод join в потоках
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!'
спасибо, это именно то решение, и прекрасно работает с моим расширяет поток. Спасибо!!! – Booyeoo
Наличие ваших объектов Threads не служит никакой полезной цели, я бы попросил их просто реализовать Runnable. Это не такая уж большая сделка, поскольку вы не запускаете нить, но у нее есть накладные расходы. –