當前位置:首頁 » 安卓系統 » android線程結束線程結束

android線程結束線程結束

發布時間: 2022-08-24 22:14:57

1. 如何終止 android線程池中的任務

  • 終止android線程池中的任務的方法

    1.實現Callable介面

    2.調用pool.submit()方法,返回futrue對象

    3.用future對象來獲取線程的狀態。



  • java">voidtest(){
    ExecutorServicepool=Executors.newFixedThreadPool(2);


    Callable<String>s=newCallable<String>(){

    @Override
    publicStringcall()throwsException{
    System.out.println("test");
    return"true";
    }
    };

    Future<String>f=pool.submit(s);

    System.out.println(f.isCancelled());
    System.out.println(f.isDone());
    f.cancel(true);


    }


2. android thread 後台線程 怎麼設置隨著主線程的結束而結束

關於線程的結束有以下幾點:
1.不要手動調用stop方法強行終止一個線程,這種方式不安全。

通過幫助文檔,我們可以知道,Android的線程類本身就提供了一些公共方法去結束線程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通過說明我們可以看到,這些方法Android本身都是不推薦使用的,通過這種方式結束線程是不安全的。
2.線程里run函數短,執行完後線程會自行銷毀,不用手動去終止。
3.手動停止,通過在run里設置標志先停止運行,再調用Thread.interrupt();注意,在run沒有停止時調用.interrupt()沒有效果。

3. Android怎麼結束一個線程

在Java語言中,安全結束線程的方法就是「讓線程的自身流程執行完」。
出現「僵屍線程」的原因:1.線程在死循環中執行。2.線程阻塞。

很明顯,你的ReadHandlerThread線程發生了線程阻塞。

dis.readFully(b),你在這里調用了一個阻塞方法,由於socket的另一端一直沒有發送數據,ReadHandlerThread線程一直阻塞在了這里,等待接收完136位元組的數據。136位元組沒有接收完,readFully方法將一直處於阻塞狀態。

解決方法,設置socket的等待超時值,而不是無限等待。

4. android如何終止一個正在運行的子線程

線程像這樣:
Thread{
boolean flag = fase;
run(){
while(!flag){
}
}
}
Thread t = new Thread();
t.start();
-----------------------------------------------------
要終止循環,只需要這樣
t.flag=true;
================================================
還有一種方式 線程像這樣:
Thread{
run(){
while(true){
Thread.sleep(xxxx);
}
}
}
Thread t = new Thread();
t.start();
--------------------------------------------
要終止循環,只需要這樣
t.interrupte();
但是這里要注意調用的時機,要在子線程執行了run方法裡面的sleep(xxxx)後xxxx時間之內調用。也就是子線程會睡一會,醒一會,睡一會,醒一會,要在子線程睡著的時候調用。

5. Android 如何監聽一個線程的開始和結束

方法一:輪詢

比如主線程要等子線程在得到變數「val」值的時候開始用「val」的值來進行工作,這個比較簡單。

方法二,回調
回調就是調用別的對象的方法時把「自己」傳進去,然後別的對象在某個時候調用「自己的方法」

publicinterfaceThreadCallback{
voidthreadStartLisener();
voidthreadEndLisener();
}{
;
publicSubRunnable(ThreadCallbackthreadCallback){
this.mThreadCallback=threadCallback;
}
@Override
publicvoidrun(){
mThreadCallback.threadStartLisener();
for(inti=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"dosomething"+i);
}
mThreadCallback.threadEndLisener();
}

}{
=newThreadCallbackTest();
publicstaticvoidmain(String[]args){
System.out.println(Thread.currentThread().getName()+"開始");
newThread(newSubRunnable(mThreadCallbackTest)).start();
}

@Override
publicvoidthreadStartLisener(){
System.out.println(Thread.currentThread().getName()+"線程,知道SubRunnable線程開始執行任務了");
}

@Override
publicvoidthreadEndLisener(){
System.out.println(Thread.currentThread().getName()+"線程,知道SubRunnable線程任務執行結束了");
}
}

6. android需要考慮結束線程嗎

  • Android終止線程的方法前提

    線程對象屬於一次性消耗品,一般線程執行完run方法之後,線程就正常結束了,線程結束之後就報廢了,不能再次start,只能新建一個線程對象。但有時run方法是永遠不會結束的。

  • 三種方法可以結束線程:

  1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。

  2. 使用interrupt()方法中斷線程。

  3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)。

  • 使用退出標志終止線程

    使用一個變數來控制循環,例如最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。代碼如下:

  • 使用stop方法終止線程

    程序中可以直接使用thread.stop()來強行終止線程,但是stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,不安全主要是:thread.stop()調用之後,創建子線程的線程就會拋出ThreadDeatherror的錯誤,並且會釋放子線程所持有的所有鎖。

其他注意事項:

前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程,第3種方法相當於電腦斷電關機一樣,是不安全的方法。

熱點內容
格式化linux 發布:2025-01-14 18:35:14 瀏覽:592
如何進入安卓原生市場 發布:2025-01-14 18:22:06 瀏覽:557
台式電腦找不到伺服器 發布:2025-01-14 18:19:58 瀏覽:422
androidsdk網盤 發布:2025-01-14 18:17:43 瀏覽:79
個別用戶訪問不了騰訊雲伺服器 發布:2025-01-14 18:03:27 瀏覽:276
oracle鏈接sqlserver 發布:2025-01-14 17:58:33 瀏覽:729
sql完全手冊 發布:2025-01-14 17:53:03 瀏覽:248
幻三腳本下 發布:2025-01-14 17:20:20 瀏覽:910
我的世界基岩版如何創自己的伺服器 發布:2025-01-14 17:15:01 瀏覽:329
花果演算法 發布:2025-01-14 17:09:57 瀏覽:775