![](/img/trans.png)
[英]What is the difference between Thread.start() and Thread.run()?
[英]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.