2010-07-13 12 views
14

JDK> = 1.5 ile, bir iş parçacığı başlatmanın tercih edilen yolu her zaman bir Yürütücü veya Yürütme Hizmeti olmalıdır veya bir ExecutorService'nin ne tür bir gereksinimine ihtiyacınız yoksa bir Thread.start kullanmayı tercih etme nedenleri var mıdır?Kendi iş parçanızı başlatmak yerine her zaman bir ExecutorService kullanmanız gerekir mi?

Senkronlaştırılmış için, explained otherwise olana kadar yeni Lock uygulamalarının kullanılmasının tercih edildiğini düşünürdüm. Bu yüzden, aynı şeyleri Yöneticiler hakkında merak ediyorum. Daha karmaşık vakaları ele almanın bir yolu mu yoksa standart seçim mi?

+0

Hem harika cevaplar, hem de Vector ve Hashtable ile karşılaştırmayı getiren kabul edileni vermem gerekiyordu. – Yishai

cevap

10

Şahsen, Java 5 beri, tamamen, Thread ve ThreadGroup üzerinde bıraktım.

ExecutorService'u kullanırken, Callable kullanabileceğimi biliyorum, biliyorum (küçük bir ek yük ile) yinelenen görevleri zamanlayabilirim. Bunun bir sonucu olarak, Vector ve Hashtable gibi Thread kullanımdan kaldırılan nesnelerin doğrudan örneğini kullanıyorum.

10

Java Concurrency in Practice en azından açıkça 6.2 .:

Java sınıfı kütüphanelerde görev yürütme için birincil soyutlama değilThread ama Executor olan bölümünde belirtmektedir. [...]

Bir Yürütücü kullanmak, genellikle uygulamanızda bir üretici-tüketici tasarımını uygulamanın en kolay yoludur. onlar ExecutorService yol az özelleştirme ve işlevsellik sağlamak olarak

2

Doğru çok iş parçacıklı kod yazmak çok zordur. Executor çerçevesinin güzelliği, geliştiricilerin karşılaşacağı ağır kaldırma işlemlerinin çoğunu gerçekleştirmesi ve sadece java.util.concurrent API'sine Callable veya Future uygulamasını ve programı uygulamanızı gerektirmesidir. IMHO, çok daha okunabilir kodlarla sonuçlanır ve düzgün bir şekilde işlenen ipliklerin karmaşıklığı nedeniyle yanlış uygulayabilmesi için daha az fırsat sunar.

İlgili konular