android線程結束線程結束
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方法是永遠不會結束的。
三種方法可以結束線程:
使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
使用interrupt()方法中斷線程。
使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)。
使用退出標志終止線程
使用一個變數來控制循環,例如最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。代碼如下:
使用stop方法終止線程
程序中可以直接使用thread.stop()來強行終止線程,但是stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,不安全主要是:thread.stop()調用之後,創建子線程的線程就會拋出ThreadDeatherror的錯誤,並且會釋放子線程所持有的所有鎖。
其他注意事項:
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程,第3種方法相當於電腦斷電關機一樣,是不安全的方法。