SORU
9 Kasım 2009, PAZARTESİ


ThreadPoolExecutor iş parçacığı güvenli mi?

Bu ExecutorService iş parçacığı güvenliği garanti ediyor mu ?

Aynı ThreadPoolExecutor için farklı bir iş parçacığı işleri gönderme olacağım, gönderme görevleri etkileşim/önce uygulamakla erişimini eşitlemek gerekiyor?

CEVAP
29 EYLÜL 2011, PERŞEMBE


(Diğer cevapları aksine)-emniyet iplik sözleşmebelgelenmiş: interface javadocs yöntemleri javadoc (karşıt olarak). ExecutorService javadoc altındaki örneğin, bulabilirsiniz:

Bellek tutarlılık etkileri: bir iplik Eylemler önce bir ExecutorService için Çalıştırılabilir veya Çağrılabilir bir görev teslimi başına daha önceherhangi bir eylem bu görev, hangi tarafından alınan bir ihbar başına daha öncesonuç Gelecekteki üzerinden alınır.().

Bu cevap için yeterli:

<>p "ben görev sunmasını?"/etkileşim önce uygulamakla erişimini eşitlemek için

Hayır buna gerek yok. İyi ve herhangi bir (doğru bir şekilde uygulandığında) ExecutorService harici senkronizasyon olmadan işleri inşa göndermek için en iyisidir. Bu temel tasarım hedeflerinden biridir.

ExecutorServiceeşzamanlısenkronizasyon gerek kalmadan büyük ölçüde çalışması için tasarlanmıştır. ki bu da yarar, performans için. (Senkronizasyon çok sayıda iş parçacığı için Ölçekleme yaparken Çoklu-işlem verimliliği - özellikle bozulmasına neden olan iş parçacığı çakışması neden olur.)

Orada hiçbir garantisi de ne zaman geleceği görevler yürütülür ya da tamamen (bazı bile idam hemen aynı iş parçacığı gönderilen onları) ancak bu iş parçacığı olduğunu garanti gerek görülen tüm etkiler gönderme iplik yürüttüteslim noktaya. Bu nedenle (çalışan iplik) görevi de güvenli bir şekilde herhangi bir veri senkronizasyonu, iş parçacığı için güvenli bir sınıf veya herhangi diğer formları olmadan kullanımı için oluşturulan okuyabilir "". güvenli yayın Görev teslimi eylemi" görevi için veri girişi. "güvenli yayın için tek başına yeterli değildir Sadece giriş verileri görev çalışırken herhangi bir şekilde değiştirilmiş olmayacaktır emin olmak gerekir.

Benzer şekilde, ne zaman sen getir sonucu görevine geri) Future.get() alma iş parçacığı olacak garanti görmek tüm etkileri tarafından yapılan uygulamakla bu iş parçacığı (hem döndürülen bir sonuç, ayrıca herhangi bir yan etkisi değişiklikler işçi iş parçacığı olabilir.

Bu Sözleşme de görevlerini kendilerini daha fazla görev verilmesi için iyi olduğu anlamına gelir.

"ExecutorService iş parçacığı güvenliği garanti eder mi ?"

Şimdi soru bu kısmı çok daha genel. Örneğin yöntemi hakkında iplik-güvenlik anlaşmasının herhangi bir açıklamada bulunamadı, Javadoc kod örneği senkronizasyon kullanmaz unutmayın rağmen shutdownAndAwaitTermination -. (Belki de kapatma gizli bir varsayım var, ancak Uygulamakla oluşturan aynı iş tarafından teşvik, ve örneğin bir iş parçacığı?)

Kitap "" eş zamanlı programlama dünyasına. iyi bir öğütün için Uygulamada Java Eşzamanlılık tavsiye ederdim ben BTW

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • Tina Chen

    Tina Chen

    26 Mayıs 2012