簡體   English   中英

thread.start()和executor.submit(thread)之間的區別

[英]difference between thread.start() and executor.submit(thread)

我面臨有關線程的問題。 我有一個實現可運行的類,並且可以在該類上使用thread.start()方法。 我的問題是我還有一個類java.util.concurrent.ExecutorService ,可以在其中調用executor.submit(thread)。

誰能告訴我thread.start()executor.submit(thread)什么區別...

executor.submit方法采用Runnable,而不是Thread。 executorServices的要點是它們可以控制創建和池化線程,因此調用它們的代碼不必如此。

您不應將線程提交給執行者。 首先,這只是浪費,因為將在其上調用的唯一方法是run() ,並且您只需要一個Runnable ,而不需要Thread

其次,雖然此問題在最新的JDK中得到了解決,但以前如果您創建許多Thread對象並且不對它們調用.start() ,就會發生內存泄漏問題。 基本上,創建Thread對象會分配一些內存,這些內存只能在調用.start()之后回收。 因此,在早期的JDK中executor.submit(thread)有潛在的危險(我認為只有在JDK6左右才解決)。

回到您的問題,executor.submit(thread)無效。這完全是錯誤的,因為執行者使用自己的線程來執行可運行對象。 畢竟,這是使用執行程序的全部要點。 您想將任務(調用)和執行分開。 僅當您要提供執行程序(線程)時,才應使用Thread ,但很少需要這樣做。 通常,建議實現一個Runnable並使用執行程序來執行它,而不是自己處理Thread

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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