2016-01-22 13 views
16

kazanır. Bu, implements Runnable is preferred over extends Thread'un Java iş parçacığında olduğunu bildiğinden, eğer gerekliyse başka bir sınıfı genişletmemize izin veriyor. Fakat bu durumda, extends Thread'un implements Runnable'a göre kendi avantajları vardır ve eğer öyleyse, bu avantajlar nelerdir?Niçin 'Thread'leri genişletiyor', 'Runnable uygulandığında', tüm durumlarda

+4

@proudandhonour: Evet, bu sorunun cevabını okudum, ancak tüm cevaplar 'uygulanabilir olanları nasıl uygulayacağını' açıklıyor. Ve aslında bu cevaplar aklımda bu soruyu yarattı. – rahul

+1

@proudandhonour Bu soruyu cevaplayan cevaba bağlanır mısınız? İlk birkaçda görünmüyor. – djechlin

+0

senaryosu, iş parçacığı başladığında, söz konusu iş parçacığının ayrıntılarını DB'ye eklemek istediğinizi düşünün. Bu, run() yönteminde sahip olduğunuz iş mantığından farklıdır, dolayısıyla onu ayrı tutmak istersiniz. Böylece, start() ve run() yöntemini –

cevap

30

Bazen (neredeyse hiçbir zaman değil, bazen) Thread'un temel davranışını değiştirmek isteyebilirsiniz.

Uzatmanız gereken zaman.

Thread sınıfından bir yöntemi geçersiz kılarak değiştirebilirsiniz, bunu Runnable'dan birini uygulayarak gerçekleştiremezsiniz.

+6

Örnek [burada] geçersiz kılarsınız (http://stackoverflow.com/questions/34905333/in-run-method-how-to-find-from-where-start- denir/34905821 # 34905821) - asker bu parçacığı hangi parçacığı oluşturduğunu/başlattığını bilmek istedi. Kurucuyu geçersiz kılar ve bunu yapmaya başlar. – OldCurmudgeon

18

Java 1.0 sürümünden bu yana en son 20 yılı aşkın süredir, iyi bir tasarım deseni olarak kabul edilen şey değişti. Ancak, Java, geriye dönük uyumluluğa kendini adamış, bu da zayıf tasarım desenlerini kullanabilecek eski kodun hala işe yarayacağı anlamına geliyor.

Evcil hayvan nefretlerimden biri StringBuffer'dur; bunun için yöntem eşzamanlı hale getirilmesinin iyi bir fikir olmadığını, onlarca yıldan daha uzun bir süre önce değiştirildiğini, ancak ne yazık ki geliştiricilerin bugün kullanılmasını engellemediğini ve hatta yeni geliştiricilerin bile bunu kullanmamasını, Java kullanmaya başlamadan çok önce kullanımdan kaldırılmış olsa bile.

+2

, runable'lar ve thread'lar arasındaki seçimin "tasarım desenleri" ile hiçbir ilgisi yoktur, bu hiçbir anlam ifade etmez. Bunlar, iki farklı kullanım senaryoları olan – specializt

+0

'dur. Tasarım kalıpları, mirasa göre bileşimdir. Aklında olan iki farklı kullanım durumu nedir? Alt-classing 'Thread' * çok nadiren * bir şeyi geçersiz kılma hakkında * ama 'runnable' bir 'Thread' ile ilgili 'runnable' olduğunu düşünürseniz 'run()' –

+0

. Peki öyle değil. Hiç de. Yürütülebilirler engellenir, yürütülebilir algoritmalar ve iş parçacıkları, çağrılan iş parçacığı sona erdikten sonra hala çalışabilen, eşzamansız, bağımsız olanlardır. Lütfen size yabancı olan konular hakkında cevap yazmayın, çok teşekkür ederim. Bu soru, "Ne daha iyi: GM bitkileri ya da son kötü kırma mevsimi" ne göre yeniden düzenlenebilir. – specializt

İlgili konular