() newCachedThreadPool V/s newFixedThreadPool
newFixedThreadPool(...)
karşı newCachedThreadPool()
Zaman her birini kullanmalıyım ve hangi strateji kaynak kullanımı açısından daha iyi?
CEVAP
Doktorlar, bu iki işlevi farkı ve kullanımı oldukça iyi açıklar sanırım
Bir yeniden bir iş parçacığı havuzu oluşturur konuları kapalı işletim sabit numara paylaşılan sınırsız bir sıra. Herhangi bir At Noktası, En nThreads de konuları olacak aktif görevler işleniyor. Eğer ek görevler ne zaman sunulmuştur. iş parçacığı etkin, bekleyeceklerdir bir iplik kadar sıra olur mevcut. Eğer herhangi bir iş parçacığı sona ererse yürütme sırasında bir hata nedeniyle kapatma önce, yeni bir tane alacak onun yerine eğer çalıştırmak için gereken sonraki görevleri. Bu iş parçacıkları havuz açıkça kadar var olacaktır kapatma.
Yeni oluşturduğu bir iş parçacığı havuzu oluşturur konuları gerektiği gibi, ama yeniden olacak daha önce inşa ipliklerini mevcuttur. Bu havuzlar olacak genellikle performansını artırmak çok kısa ömürlü yürütme programları zaman uyumsuz görevler. Yürütmek için çağrı önceden yeniden inşa edecek varsa konuları. Varolan yok iş parçacığı, yeni bir iş parçacığı olacaktır. oluşturulacak ve havuzuna eklenir. Henüz iş parçacıkları için kullanılan altmış saniye sonlandırılır ve önbellekten kaldırıldı. Böylece, bir havuz bu yeterince uzun bir süre için boşta kalır herhangi kaynaklarını tüketir. Unutmayın benzer özelliklere sahip ama havuzları farklı ayrıntıları (örneğin, zaman aşımı parametrelerin) oluşturulabilir ThreadPoolExecutor kurucular kullanarak.
Kaynakları bakımından, newFixedThreadPool
açıkça sona kadar bütün konuları yayınlanmaya devam edecek. Altmış için kullanılan newCachedThreadPool
Konuları saniye sonlandırıldı ve önbellekten kaldırılır.
Bu verilen, kaynak tüketimi çok duruma göre değişir. Eğer uzun süren görevler büyük bir sayı Varsa örneğin, FixedThreadPool
öneririm. CachedThreadPool
olarak doktorların söylediği "Bu havuzlar genellikle kısa ömürlü çoğu zaman uyumsuz görevleri yürütmek programlarının performansını iyileştirir".