![](/img/trans.png)
[英]How HttpServlet can create threads without implementing Runnable or extending thread
[英]Java: extending Thread without implementing run()
我是一名技術作家,他了解一些Java,並且已受命在一些舊的,高度線程化的Java代碼中跟蹤線程。 該代碼的原始作者不在這里,因此我們試圖確切地了解其工作原理。 我遇到了一個擴展Thread
但未實現run()
方法的類。 擴展Thread
但不實現run()
(如果有)的意義是什么?
我確實注意到該類的方法之一是synchronized
:
public synchronized void incrementCounter() {
this.counter++;
}
但其他所有方法似乎都不同步。 實際上,大多數其他方法只是獲取器和設置器。 為了聲明方法已synchronized
是否需要擴展Thread
或實現Runnable
? 謝謝!
我的猜測是,此舊代碼是在某些標准線程池庫,ExecutorService等之前編寫的。因此,也許這是該公司試圖實現類似功能的嘗試。 (或者一個未在此處發明的響應),只要代碼始終
Thread thread = new ThisSpecialThreadClass(someRunnable);
thread.start();
您將獲得它所具有的任何“好處”,並且,正如您在評論中指出的那樣,它最終應調用someRunnable.run().
擴展Thread但不實現run()的意義是什么?
正如@ Mik378所提到的,這樣做幾乎沒有意義。 在不覆蓋run()
方法的情況下,線程將立即開始並完成。
為了聲明方法是否同步,是否需要擴展Thread或實現Runnable?
不,他們彼此無關。 您無需創建任何線程即可使用synchronized
方法。 synchronized
的對象是方法的實例,無論哪個線程調用它(即使它是“主”線程)都將在該對象上同步。
如果您查看擴展Thread
的類(盡管不建議這樣做)並且未實現run
方法,則聽起來像是一個abstract
類。 檢查一下。
此外,回答你的第二個問題是絕對沒有 :
synchronised
從不希望包裝類擴展Thread
或實現Runnable
因為線程不與特定類關聯,而是跨一個或多個。
如果您斷言所關注的類不是abstract
,那么我懷疑您看到的Thread
類型確實是屬於另一個包的自定義類型(不同於java.lang.Thread
)...與Thread類無關:丑陋但可能...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.