Java 之前有個(gè)api函數(shù)可以直接關(guān)閉線程, stop(), 后來(lái), 取消了. 其替代的方式主要有兩種:
1. 自己加入一個(gè)成員變量, 我們?cè)诔绦虻难h(huán)里面, 輪流的去檢查這個(gè)變量,  變量變化時(shí),就會(huì)退出這個(gè)線程. 代碼示例如下
package com.test;

public class StopThread extends Thread {

    
private boolean _run = true;
    
public void stopThread(boolean run) {
        
this._run = !run;
    }
    
    @Override
    
public void run() {
        
while(_run) {
            
///
            
//數(shù)據(jù)處理
            ///
        }
        
//super.run();
    }

    
public static void main(String[] args) {
        StopThread thread 
= new StopThread();
        thread.start();
        
try {
            Thread.sleep(
1000);
        } 
catch (InterruptedException e) {
            e.printStackTrace();
        }
        
//停止線程
        thread.stopThread(true);
    }

    
}
2. 方法1 雖然可以可以處理好, 不過(guò), 在有阻塞線程的語(yǔ)句的時(shí)候往往不能處理好. 比如, 設(shè)計(jì)到Socket的阻塞語(yǔ)句. 雖然java有提供異步io但是異步io是在程序里不斷去查詢有沒(méi)有消息的, 所以耗電量可想而知, 對(duì)手機(jī)這種設(shè)備來(lái)說(shuō)往往不適用.
那么阻塞的語(yǔ)句,怎么終止線程呢?
Java雖然deprecate了一個(gè)stop,但是,提供了interrupt(),這個(gè)方法是安全的.  這個(gè)中斷方法可以將阻塞的線程喚醒過(guò)來(lái), 但是注意 他不能將非阻塞的線程中斷. 中斷的同時(shí),會(huì)拋出一個(gè)異常InterruptedException. 幸運(yùn)的是, SocketChannel.connect() .read() 阻塞方法都會(huì)接受中斷,ClosedByInterruptException.
這時(shí)我們不輪詢變量了, 輪詢當(dāng)前線程是否被中斷, 代碼
package com.test;

public class StopThread extends Thread {


    @Override
    
public void run() {
        
try {
            System.out.println(
"start");
            
while(!this.isInterrupted()) {
                
///
                
//數(shù)據(jù)處理
                ///
                
                
            }
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(
"stop");
        
//super.run();
    }

    
public static void main(String[] args) {
        StopThread thread 
= new StopThread();
        thread.start();
        
try {
            Thread.sleep(
1000);
        } 
catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        thread.interrupt();
        System.out.println(
"interrupt");
    }
    
    
}
3. Android 在自己的Api中加入了,Process類, 這個(gè)類可以直接終結(jié)進(jìn)程, 也就是當(dāng)前線程所在的JVM. 
final static void killProcess(int pid)  其中,pid, 可以通過(guò)Process.mypid() 獲取, 但這樣終結(jié)的是整個(gè)程序, 不是我們所想要的.