Buradaki herkes Runnable'ın uygulanmasının bir yol olduğunu düşünüyor gibi görünüyor ve ben gerçekten onlarla aynı fikirde değilim ama benim görüşüme göre Thread genişletmek için bir dava da var, aslında kodunuzda bir çeşit gösterdiniz.
Runnable uygularsanız, Runnable uygulayan sınıfın iş parçacığı adı üzerinde hiçbir denetimi yoktur, iş parçacığı adını ayarlayabilen arama kodudur, şöyle:
new Thread(myRunnable,"WhateverNameiFeelLike");
ancak Thread'ı genişletirseniz, bunu sınıfın kendisinde yönetirsiniz (örneğin örneğinizde olduğu gibi 'ThreadB' iş parçacığını adlandırırsınız). Bu durumda:
A) hata ayıklama amacıyla daha yararlı bir ad verebilir
B) bu ismin bu sınıfın tüm örnekleri için kullanılmasını zorunlu kılıyor (eğer bir iş parçacığı olduğu gerçeğini görmezden gelmezseniz ve yukarıdakini Runnablemış gibi yaparsanız, ancak burada her durumda konvansiyondan bahsediyoruz. hissettiğim olasılığı görmezden gel).
Örneğin, yaratımının yığın izlemesini alabilir ve bunu iş parçacığı adı olarak kullanabilirsiniz. Bu tuhaf görünebilir, ancak kodunuzun nasıl yapılandırıldığına bağlı olarak hata ayıklama amaçları için çok yararlı olabilir.
Bu küçük bir şey gibi görünebilir, ancak çok fazla iş parçacığına sahip çok karmaşık bir uygulamanız olduğu ve ani şeylerin 'durduğu' (ya kilitlenme nedenlerinden dolayı veya muhtemelen daha az olan bir ağ protokolündeki bir kusur nedeniyle) bariz - ya da başka sonsuz nedenlerle), daha sonra tüm iş parçacıklarına 'İş Parçacığı-1', 'İş Parçacığı-2', 'İş Parçacığı-3' adı verilen bir yığın dökümü almak her zaman çok yararlı değildir (iş parçacıklarınızın nasıl olduğuna bağlıdır) yapılandırılmış ve hangisinin sadece yığın izlemesiyle hangisinin yararlı olduğunu anlayabiliyor musunuz - hepsi aynı kodu çalıştıran birden çok iş parçacığı grubu kullanıyorsanız her zaman mümkün değildir).
Elbette yukarıdakileri, kendi oluşturma çağrısının yığın izine ayarlayan thread sınıfının bir uzantısını oluşturarak ve ardından bunu standart java Thread sınıfı yerine Runnable uygulamalarınızla kullanarak genel bir şekilde yapabileceğinizi söyledikten sonra (aşağıya bakın) ancak yığın izlemesine ek olarak, hata ayıklama için iş parçacığı adında yararlı olabilecek daha fazla içeriğe özgü bilgi olabilir (örneğin, işleyebileceği birçok kuyruk veya soketten birine yapılan bir başvuru, bu durumda tercih edebilirsiniz Derleyicinin sizi (veya kitaplıklarınızı kullanan diğerlerini) belirli bilgileri (örneğin söz konusu kuyruk / soket) adda kullanılmaya zorlamaya zorlayabilmesi için özel olarak Konuya göre genişletin.
İşte adı olarak çağıran yığın izlemesine sahip genel iş parçacığına bir örnek:
public class DebuggableThread extends Thread {
private static String getStackTrace(String name) {
Throwable t= new Throwable("DebuggableThread-"+name);
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
t.printStackTrace(ps);
return os.toString();
}
public DebuggableThread(String name) {
super(getStackTrace(name));
}
public static void main(String[] args) throws Exception {
System.out.println(new Thread());
System.out.println(new DebuggableThread("MainTest"));
}
}
ve işte iki ismi karşılaştıran bir çıktı örneği:
Thread[Thread-1,5,main]
Thread[java.lang.Throwable: DebuggableThread-MainTest
at DebuggableThread.getStackTrace(DebuggableThread.java:6)
at DebuggableThread.<init>(DebuggableThread.java:14)
at DebuggableThread.main(DebuggableThread.java:19)
,5,main]