導航:首頁 > 編程語言 > java線程自動關閉

java線程自動關閉

發布時間:2021-12-07 11:17:08

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

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

② java多線程,怎麼讓一個線程中斷並關閉

boolean變數不適合你的需要。
你應把載入音樂的責任交給AudioClip來完成,其實就是它自己去載入音樂,這樣方便管理。

public class AudioClip {
private Thread thread = null;

public synchronized void load(String url) {
if (thread != null) {
throw new IllegalStateException();
}
thread = new AudioClipLoader(url);
thread.start();
}

public void shutdown() {
Thread snapshot;
synchronized (this) {
snapshot = thread;
thread = null;
this.notifyAll();
}
if (snapshot != null) {
snapshot.interrupt();
}

}

private class AudioClipLoader extends Thread {
private String url;

public AudioClipLoader(String url) {
this.url = url;
}

@Override
public void run() {
while (true) {
Thread me = Thread.currentThread();
if (me != thread) {
break;
}
System.out.println("正在載入" + url + " ...");
try {
Thread.sleep(90 * 1000 * 60);
} catch (Exception ex) {
synchronized (AudioClip.this) {
me = Thread.currentThread();
if (me != thread) {// close by AudioClip
System.out.println("Shutdown by AudioClip!");
break;
}
// network connection exception
throw new RuntimeException(ex);
}
}
}
}
}

public static void main(String[] args) throws Exception {
AudioClip audioClip = new AudioClip();
audioClip.load("http://java.sun.com/");
Thread.sleep(5000);
audioClip.shutdown();

}

}

③ java多線程時程序運行完成為什麼不會自動關閉退出

具體演示如下:

[java] view plain
package test;
public class TestShutDownHook {
public TestShutDownHook() {
doShutDownWork();
}
private void doShutDownWork() {
Runtime run=Runtime.getRuntime();//當前 Java 應用程序相關的運行時對象。
run.addShutdownHook(new Thread(){ //注冊新的虛擬機來關閉鉤子
@
public void run() {
//程序結束時進行的操作
System.out.println("程序結束調用");
}
});
}
public static void main(String[] args) {
new TestShutDownHook();
for (int i = 0; i < 1000; i++) { // 在這里增添您需要處理代碼 }
System.out.println(i);
}
}
}
在上述程序中,我們可以看到通過在程序中增加Runtime.getRuntime().addShutdownHook(new Thread()) 事件監聽,捕獲系統退出消息到來,然後,執行我們所需要完成工作,從而使我們的程序更健壯!

望採納,謝謝。

④ 請教java線程池沒有運行完就自動退出了,我也沒有去關閉。。

線程的調度和使用方式沒有任何問題,Thread.sleep(2*1000);也沒有任何必要,因為這樣寫阻塞的只是主線程內。
問題應該是處在AxsInfoThread類中容,是不是這個類的run方法中的任務已經執行完了,或者其內部又開啟了新線程。

⑤ java 中如何使線程運行一定時間後停止

使用計時器Timer,可以實現,在計時器中設定時間,到達後關閉計時器,退出線程就行了。
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.Timer;
class
tt
implements
ActionListener{
ttt
t;
Timer
time;
public
tt(ttt
t){
this.t=t;
time=new
Timer(1000,this);
time.setRepeats(false);
}
public
void
actionPerformed(ActionEvent
e){
time.stop();
}
}
class
ttt
extends
Thread{
tt
temp;
int
i=0;
public
ttt(){
temp=new
tt(this);
}
public
void
run(){
temp.time.start();
while(i<10000){
System.out.print(i+"
");
i++;
if(!temp.time.isRunning()){
System.out.println("End");
return;
}
}
}
}
public
class
time
{
public
static
void
main(String
args[]){
ttt
tttt=new
ttt();
tttt.start();
}
}
這個是我做的,列印1-10000,如果時間超過1秒,剩下的就不列印,退出時由於線程排隊,需要等一下才能結束列印(注意每次列印的數可能不一樣多)。。。

閱讀全文

與java線程自動關閉相關的資料

熱點內容
韓國電影 女主角在療養院工作 瀏覽:926
javascriptsidebar 瀏覽:769
義烏用什麼app坐公交 瀏覽:14
矩陣縱橫cad文件下載 瀏覽:832
四個字的動畫片 瀏覽:461
js最新皮膚2017 瀏覽:587
恐怖電影無限流小說 瀏覽:178
主人公葉天的小說 瀏覽:834
dede採集基礎教程 瀏覽:487
牌技百度雲網盤文件 瀏覽:306
韓國大寸度電影大全美容院 瀏覽:678
網上自學編程怎麼樣 瀏覽:609
傳文件給領導叫什麼 瀏覽:937
225升級235 瀏覽:613
電影院和男朋友親熱 瀏覽:392
ema如何打開文件 瀏覽:250
基線文件定義 瀏覽:688
c打包安裝程序 瀏覽:96
韓國電影我朋友的老婆主角叫什麼 瀏覽:937
武林盟主私密記事txt百度網盤 瀏覽:682

友情鏈接