2010-12-23 19 views

cevap

11

İş parçacığı ve Runnable, Java 1.0'ın bir parçasıydı; O zamanlar oldukları kadar iyiler.

Yeni eşzamanlılık sınıfları, o zamandan bu yana çok iş parçacığı hakkında öğrenilenleri damlatıyor (teşekkürler, Doug Lea ve diğerleri). Çok iş parçacıklı kod yazmak çok zor. SwingWorker dahil olmak üzere yeni eşzamanlılık sınıfları, bunu daha kolay hale getirmeye çalışır.

Güçlü yazım için jeneriklere dikkat ederek başlayın. Hem nihai hem de orta sonuçları yayınlamak ve işlemek için bir mekanizma var.

Bunları Thread and Runnable ile taklit etmek mümkün olabilir, ancak SwingWorker sizin için yaptı.

+1

, SwingWorker'ın gerçekten yeni eşzamanlılık sınıflarının bir parçasıdır? Swing API'sinin bir parçası olduğunu düşünüyorum ve bunu kullanmanın temel nedeni, Event Dispatch Thread (EDT) ile ilgili kısıtlamalardan kaynaklanmaktadır. –

+1

Eşzamanlılık paketinin bir parçası değil, aynı ruhta düşünürdüm. Yanlış olabilir. – duffymo

+0

Evet ama temel olarak bir Gelecek yani her şey yolunda! – HaveAGuess

12

SwingWorker, görevi çalıştırırken veya görev bittikten sonra UI güncelleştirmeleri gibi bazı ayrıntılarla ilgilenir. Bunlar, Swing EDT ipliği üzerinde gerçekleştirilmelidir. Kendin yapabilirsin, ama yanlış yapmak çok kolay.

14

Ben SwingWorker dokümantasyonu oldukça iyi olduğunu düşünüyorum:

Bir soyut sınıf adanmış dizisindeki uzun GUI-etkileşim görevleri gerçekleştirmek için.

bir çok kanallı uygulamasını kullanarak salıncak yazarken, akılda tutulması gereken iki kısıtlamalar vardır: (ayrıntılar için How to Use Threads bakınız):

  • Zaman alıcı görevler üzerinde çalışan edilmemelidir Olay Sevk Konu. Aksi takdirde uygulama yanıt vermiyor.
  • Salınım bileşenlerine yalnızca Olay Dağıtımı İpliği 'dan erişilebilmelidir.

Bu kısıtlamalar zaman yoğun bilgisayar ile bir GUI uygulama en az iki konuları ihtiyacı anlamına: 1) iplik uzun görevi gerçekleştirmek ve 2) Tüm GUI için Olay Sevk Konu (EDT) -ilgili aktiviteler. Bu, numaralı iletişim aracını içerir ve uygulamasına zor olabilir.

SwingWorker bir arka plan iş parçacığı uzun süren bir görev sürüyorsa ve işleme ya yapıldığında ya da UI güncellemeler sağlamaya gereken durumlar için tasarlanmıştır. SwingWorker alt sınıfları , arka plan hesaplama gerçekleştirmek için doInBackground() yöntemini uygulamalıdır.

kesinlikle bu kullanarak Konu, Runtime ve SwingUtilities ( invokeLater) yapabilir ama daha kolay ve muhtemelen daha az hata eğilimli SwingWorker sınıfını kullanarak.Olay dağıtım iş parçacığıyla doğru etkileşimi kapsülleyen

6

SwingWorker. Runnable yapmıyor.

İlgili konular