Thread
veya Runnable
yerine SwingWorker
kullanmanın avantajları nelerdir?Neden SwingWorker? Neden sadece Thread veya Runnable değil?
cevap
İş 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ı.
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.
Ben SwingWorker dokümantasyonu oldukça iyi olduğunu düşünüyorum:
kesinlikle bu kullanarak Konu, Runtime ve SwingUtilities (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.
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
SwingWorker
. Runnable
yapmıyor.
- 1. Neden Thread yerine Runnable kullanmalıyım?
- 2. SwingWorker iş parçacıklarım neden yürütülürken çalıştırılıyor?
- 3. Neden setName Thread sınıfında bir karakter dizisine atar? Neden bir String değil?
- 4. Neden csv.reader pythonic değil?
- 5. Neden std :: thread ile otomatik kullanamıyorum?
- 6. Bu eylem neden soyut değil?
- 7. ThreadPoolExecutor veya değil
- 8. Neden ana runnable Python betikleri modüller gibi pyc dosyalarını derlemediler?
- 9. SwingWorker ve Executor arasındaki farklar
- 10. Neden xdebug'ım tarz değil?
- 11. Görüşlerim neden çizim değil?
- 12. Neden getch taşınabilir değil?
- 13. TaskFactory.StartNew yöntemi neden genel değil?
- 14. Neden bir yeterlilik gerekli değil?
- 15. Neden java.awt.image.BufferedImage serializable değil?
- 16. Neden $ @ `güvenilir değil?
- 17. Neden List.toArray() genel değil?
- 18. MKPointAnnotation'ım neden Özel değil?
- 19. Neden mapStateToProps ve mapDispatchToProps, Redux'da sadece bir işlev değil mi?
- 20. Bu özyineleme neden sonsuz değil?
- 21. Programım neden pi'ye yakın değil?
- 22. Neden std :: function işlev_türü veya eşdeğer üye türüne sahip değil?
- 23. SetInterval neden milisaniye cinsinden değil?
- 24. Gunicorn_django neden bir tavsiye değil?
- 25. Neden bir runnable kullanırken Etiketim Java SWT Gui uygulamam için değişmiyor?
- 26. Neden java.io.Bits herkese açık değil?
- 27. isDot() neden yanımda değil? (PHP)
- 28. Neden GCC ve Clang'da std :: thread kullanımı için -pthread gerekli?
- 29. Java GUI bile SwingWorker
- 30. Java'nın SwingWorker
, 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. –
Eşzamanlılık paketinin bir parçası değil, aynı ruhta düşünürdüm. Yanlış olabilir. – duffymo
Evet ama temel olarak bir Gelecek yani her şey yolunda! – HaveAGuess