導航:首頁 > 編程語言 > threadjava結束

threadjava結束

發布時間:2022-09-18 19:02:48

java線程執行完後自己結束嗎

其實最佳答案的說法是有問題的,如果題主指的結束,是指方法塊語句的執行結束的話,熱心網友的說法是對的。但是對於線程本身,所有線程(包括主線程)在啟動後都被CPU參照優先順序交替調用,運行的順序是無法預測的,但最後結束的一定是主線程。
網上有部分說法,展示的代碼運行結果,「主線程先於其他線程結束,並不影響其他線程的運行」只有後半部分是對的。因為方法體(不管是自定義線程的run()還是主線程的main())中全部語句的執行完畢不代表所在線程的結束,可以用activeCount()返回當前運行的匯流排程數來驗證這一點。另外,如果將自定義的線程對象設定為守護線程(setDeamon()),也可以很清楚看到即便main()方法中最後一句輸出語句執行完畢,控制台仍會根據該自定義線程run()方法體的內容繼續輸出,這證明主線程還沒結束——因為當線程組中只剩下守護線程時,JVM虛擬機會自動退出,如果主線程已經結束,唯一活動的線程在被設置成守護線程的情況下,程序會直接結束運行,不可能繼續輸出。

Ⅱ 誰能告訴我java的Thread線程該怎麼終止

  1. 使用退出標志終止線程:thread.exit = true;

  2. 使用stop方法終止線程 :thread.stop();

  3. 使用interrupt方法終止線程 :thread.interrupt();



參考文獻:http://blog.csdn.net/anhuidelinger/article/details/11746365

Ⅲ java threadlocal線程結束會釋放當前線程的數據嗎

不會清空,要你自己去清空。

只有當ThreadLocal的生命周期受限於Task的生命周期時,在Thread Pool的Thread里使用ThreadLocal才有意義。

Task指的是一個Thread所執行的任務。總之,如果你能夠在使用ThreadLocal的時候管理它的創建、銷毀,那麼就可以用,否則會出問題。原因是ThreadLocal是和Thread綁定的,如果Thread是從Thread Pool中拿出來的,那麼意味著Thread可能會被復用,如果被復用,你就一定得保證這個Thread上一次結束的時候,其關聯的ThreadLocal被清空掉,否則就會串到下一次使用。

Ⅳ java thread 結束後 可以再次次 start 么

1.start()方法來啟動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼:通過調用Thread類的start()方法來啟動一個線程,這時此線程是處於就緒狀態,並沒有運行。然後通過此Thread類調用方法run()來完成其運行操作的,這里方法run()稱為線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程終止,而CPU再運行其它線程,2.run()方法當作普通方法的方式調用,程序還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的代碼:而如果直接用Run方法,這只是調用一個方法而已,程序中依然只有主線程--這一個線程,其程序執行路徑還是只有一條,這樣就沒有達到寫線程的目的。Thread對象的run()方法在一種循環下,使線程一直運行,直到不滿足條件為止,在你的main()里創建並運行了一些線程,調用Thread類的start()方法將為線程執行特殊的初始化的過程,來配置線程,然後由線程執行機制調用run()。如果你不調用start()線程就不會啟動。因為線程調度機制的行為是不確定的,所以每次運行該程序都會有不同的結果,你可以把你的循環次數增多些,然後看看執行的結果,你會發現main()的線程和Thread1是交替運行的。4.還有就是盡管線程的調度順序是不固定的,但是如果有很多線程被阻塞等待運行,調度程序將會讓優先順序高的線程先執行,而優先順序低的線程執行的頻率會低一些。

Ⅳ java線程執行完後自己結束嗎

其實最佳答案的說法是有問題的,如果題主指的結束,是指方法塊語句的執行結束的話,熱心網友的說法是對的。但是對於線程本身,所有線程(包括主線程)在啟動後都被CPU參照優先順序交替調用,運行的順序是無法預測的,但最後結束的一定是主線程。
網上有部分說法,展示的代碼運行結果,「主線程先於其他線程結束,並不影響其他線程的運行」只有後半部分是對的。因為方法體(不管是自定義線程的run()還是主線程的main())中全部語句的執行完畢不代表所在線程的結束,可以用activeCount()返回當前運行的匯流排程數來驗證這一點。另外,如果將自定義的線程對象設定為守護線程(setDeamon()),也可以很清楚看到即便main()方法中最後一句輸出語句執行完畢,控制台仍會根據該自定義線程run()方法體的內容繼續輸出,這證明主線程還沒結束——因為當線程組中只剩下守護線程時,JVM虛擬機會自動退出,如果主線程已經結束,唯一活動的線程在被設置成守護線程的情況下,程序會直接結束運行,不可能繼續輸出。

Ⅵ java中終止線程的方法

在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(),stop(),stop(Throwable)andsuspend(),destroy()andresume()。通過這些方法,我們可以對線程進行方便的操作,但是這些方法中,只有start()方法得到了保留。本文是海文國際小編搜索整理的關於JAVA中終止線程的方法,供參考復習,希望對大家有所幫助!



如果真的需要終止一個線程,可以使用以下幾種方法:


1、讓線程的run()方法執行完,線程自然結束。(這種方法最好)


2、通過輪詢和共享標志位的方法來結束線程,例如while(flag){},flag的初始值設為真,當需要結束時,java課程培訓機構http://www.kmbdqn.cn/建議將flag的值設為false。(這種方法也不很好,因為如果while(flag){}方法阻塞了,則flag會失效)


Ⅶ 如何正確結束Java線程

1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
2. 使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend、resume一樣,也可能發生不可預料的結果)。
3. 使用interrupt方法中斷線程。

1. 使用退出標志終止線程
當run方法執行完後,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主線程延遲5秒
thread.exit = true; // 終止線程thread
thread.join();
System.out.println("線程退出!");
}
}
在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,

2. 使用stop方法終止線程
使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程:
thread.stop();
雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,並不推薦使用stop方法來終止線程。

3. 使用interrupt方法終止線程
使用interrupt方法來終端線程可分為兩種情況:
(1)線程處於阻塞狀態,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}來判斷線程是否被中斷。
在第一種情況下使用interrupt方法,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出。下面的代碼演示了在第一種情況下使用interrupt方法。
package chapter2;
public class ThreadInterrupt extends Thread
{
public void run()
{
try
{
sleep(50000); // 延遲50秒
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception
{
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("在50秒之內按任意鍵中斷線程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("線程已經退出!");
}
}
上面代碼的運行結果如下:
在50秒之內按任意鍵中斷線程!
sleep interrupted
線程已經退出!
在調用interrupt方法後, sleep方法拋出異常,然後輸出錯誤信息:sleep interrupted.
注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止。一個是靜態的方法interrupted(),一個是非靜態的方法isInterrupted(),這兩個方法的區別是interrupted用來判斷當前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。因此,while (!isInterrupted())也可以換成while (!Thread.interrupted())。

Ⅷ java課程培訓機構分享java中終止線程的方法

在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(),stop(),stop(Throwable)andsuspend(),destroy()andresume()。通過這些方法,我們可以對線程進行方便的操作,但是這些方法中,只有start()方法得到了保留。本文是海文國際小編搜索整理的關於JAVA中終止線程的方法,供參考復習,希望對大家有所幫助!



如果真的需要終止一個線程,可以使用以下幾種方法:


1、讓線程的run()方法執行完,線程自然結束。(這種方法最好)


2、通過輪詢和共享標志位的方法來結束線程,例如while(flag){},flag的初始值設為真,當需要結束時,java課程培訓機構http://www.kmbdqn.com/建議將flag的值設為false。(這種方法也不很好,因為如果while(flag){}方法阻塞了,則flag會失效)


Ⅸ java thread 執行完後會自動關閉嗎

如果代碼該
thread線程中的代碼執行結束就會關閉,但是如果該線程代碼未執行完畢,即時主線程關閉,該線程也不會關閉

閱讀全文

與threadjava結束相關的資料

熱點內容
什麼樣的app上買機票最便宜 瀏覽:987
安卓如何查看異常重啟 瀏覽:717
解壓音樂排名 瀏覽:385
安卓手機瀏覽器怎麼掃二維碼 瀏覽:720
通達信成本均線源碼 瀏覽:618
可以下載的解壓音頻 瀏覽:567
海賊王怎麼換伺服器 瀏覽:321
計算機上的共享文件夾映射 瀏覽:942
榮耀安裝包在文件夾哪裡 瀏覽:198
機票php源碼 瀏覽:235
linux共享mac 瀏覽:926
中國沒有國外的伺服器地址 瀏覽:761
為什麼退款伺服器連接錯誤 瀏覽:559
android簡訊存儲位置 瀏覽:977
unix網路編程卷4 瀏覽:808
找靚機app下單什麼時候發貨 瀏覽:413
android一個應用兩個進程 瀏覽:803
linux硬碟復制 瀏覽:808
php圖片伺服器搭建 瀏覽:801
下載壓縮文件怎麼打開 瀏覽:194