2010-05-13 16 views
5

İhtiyacım olan şey shutdownNow uygulamasına benzer bir yöntemdir, ancak bundan sonra yeni görevler gönderebilir. Benim ThreadPoolExecutor benim program yürütme sırasında rastgele bir sayıda görevi kabul ediyor olacak.JAVA - ThreadPoolExecutor çalışan görevlerini iptal et

+1

Geçerli ExecutorService'i kapatmak ve yeni bir tane ile değiştirmek için seçenek var mı? – tylermac

cevap

8

Sen(), görevleri iptal future.cancel çağırmak istediğinizde Gelecek bir koleksiyonda, o zaman tüm görevlerini sıraya her başvuru Geleceği, mağaza yakalayabilir. Exectuor hala çalışıyorsa bu çözüm ve herhangi çalışan görevler ile

iptal edilir ya da kuyruğa eğer çalışmaz.

+0

Teşekkürler, benim tek sorum Çözümleriniz koleksiyonun boyutuyla ilgiliydi, çünkü ThreadPoolExecutor'ım sınırsız görev alacak. Ancak adlı bir Harita ve üzerine yazma ve gönderim sonrasıExecute ile koleksiyonumu yalnızca çalışan görevlerle koruyabilirim. – rgomesf

0

Neden oluşturmaz senin bu davranışı sergiler ExecutorService kendi?

0

getQueue() yöntemine bir göz atın. Temizlemenin işe yarayacağına eminim (test edilmemiştir).

+1

GetQueue() yalnızca kuyruktaki görevleri temizleyebilir. Zaten çalışan görevleri ile bir şey yapamazsınız .. – rgomesf

-1

Sadece getQueue() yapmak ve temizlemek yeterli değil mi? Çalıştırma görevlerini gerçekten durdurmayı denemeniz gerekiyorsa, ThreadPoolExecutor alt sınıfını almanız ve esasen shutdownNow() yöntemini yeniden uygulamanız gerekir, ancak yalnızca her bir iş parçacığına bir kesme gönderen biti kopyalayın. Aklınızda bulundurun, bu durumun gerçekten durdurulamayacağınız ve daha fazla hesaplama yapamayacağınızın bir garantisi değildir. Bunu yapman gerekiyorsa tamamen farklı bir yaklaşıma ihtiyacın olacak.

+0

Ben zaten shutdownNow() yeniden uygulamak için çalıştı ama bazı değişkenler özel, ve onlar olmadan ben istediğimi yapamıyorum ... – rgomesf

İlgili konular