簡體   English   中英

Java:在不實現run()的情況下擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM