我讀過它是不可能重新啟動相同的Thread。如果它應該重新啟動,那么您必須創建一個新的Thread.
但問題是,執行緒是有限的,你不能創建 40,000 個執行緒,因為作業系統只能創建 15,000 個執行緒。(這只是一個例子)。
還有另一種可能嗎?
uj5u.com熱心網友回復:
但問題是,執行緒是有限的,你不能創建 40,000 個執行緒,因為作業系統只能創建 15,000 個執行緒。(這只是一個例子)。
是的,這很令人困惑——但你混淆了術語。
javajava.lang.Thread物件不是作業系統級別的 thead。
您可以制作一百萬左右的 Thread 物件。來吧,試試看。
但是,您將無法同時啟動所有 100 萬個 em,這start()會導致事情發生,最終導致創建“作業系統級執行緒”。
一旦執行緒結束,java.lang.Thread物件會一直存在,但作業系統級別的執行緒不會。因此,您的中心問題論文,我將總結為:
重新啟動現有的 java.lang.Thread 物件比創建新的 java.lang.Thread 物件要好,因為我讀到您只能擁有 40k 左右的 java.lang.Thread 物件
完全是錯誤的。通過“重新啟動”它(這意味著它已經結束)來假設重用 jlThread 物件與在“舊”物件結束后只創建一個新物件之間的好處為零。
如果你想“重新啟動”一個執行緒,你必須做的是有一個run()方法(執行緒最終在一個新執行緒中運行的那個),它是一個框架化的東西:它檢查一個作業佇列,拉一個從頂部排隊,運行它,然后回傳檢查佇列。這無異于“重用執行緒”,盡管您現在只是重新發明ExecutorPool(烘焙到核心 java 本身)和朋友已經做的事情。
ExecutorPools 可能是個好主意。但是,它們并不能“解決”您的問題。你的問題實際上不是問題。
uj5u.com熱心網友回復:
使用Executor或ExecutorService。類Executors有一些工廠方法。通過使用使用執行緒池的執行緒池,您可以提交操作,而不必為每個單獨的操作創建執行緒。
uj5u.com熱心網友回復:
您可以使用執行緒池。例如,資料庫連接通常在執行緒池中進行管理。在它完成它的作業(例如,查詢一些資料)之后,執行緒回傳到池中,并且可以被重用。
您可能缺少的另一件事是:雖然您一次不能擁有例如 40,000 個執行緒,但沒有什么能阻止您在舊執行緒完成后創建新執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481888.html
