2015-03-31 25 views
5

denir önce iş parçacığı için ne olur? Daha doğrusu: ExecutorService (kendisi Executors.newCachedThreadPool() ile oluşturulmuş) üzerinde submit(Callable<T> task) yöntemini arayarak uyumsuz hesaplama başlatırsam, hesaplamanın bitmesini ve geri almasını bekleyebilirim. sonucu Future.get() numaralı telefonu arayarak.Java Callable: get() öğesine

Soruma soru: hesaplamanın bitmiş olması durumunda, get() numaralı telefonu aramadan ne olur? Sonuç alıncaya kadar iş parçacığı engelleniyor mu? Sonuç saklanır ve iş parçacığı başka bir göreve atanır mı? Tamamen farklı bir şey mi? peşin

teşekkürler Hayır, Konu engellenmez

cevap

4

cevaplar için, bu havuza döner. Genel olarak, işçiye bağlı get() çağrı iş parçacığı, başka bir şekilde değil. Yani bir sonuç varsa, iade edin, eğer mevcut değilse, o zamana kadar bekleyin.

+0

Cevabınız için teşekkürler! Sadece seni doğru anladığımdan emin olmak için (özür dilerim, İngilizce benim ana dilim değil): Eğer hesaplamalar için birkaç iş parçacığı başlatırsam ve sonuçların hepsi bittiğinde çok daha sonra alırsam, bu bir problem değildir çünkü tamamlanmış işler kaynaklar, değil mi? –

+0

@shadow_heart Hesaplamanın sonucu (= görev) 'Gelecek' nesnesinde saklanır, böylece istediğiniz zaman ''() 'yi alabilirsiniz. 'get()', hesaplamanın henüz bitmemesi durumunda yalnızca çağrı iş parçacığını engeller. – isnot2bad