Java 之前有個api函數可以直接關閉線程, stop(), 后來, 取消了. 其替代的方式主要有兩種:
1. 自己加入一個成員變量, 我們在程序的循環里面, 輪流的去檢查這個變量,  變量變化時,就會退出這個線程. 代碼示例如下
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) {
            
///
            
//數據處理
            ///
        }
        
//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 雖然可以可以處理好, 不過, 在有阻塞線程的語句的時候往往不能處理好. 比如, 設計到Socket的阻塞語句. 雖然java有提供異步io但是異步io是在程序里不斷去查詢有沒有消息的, 所以耗電量可想而知, 對手機這種設備來說往往不適用.
那么阻塞的語句,怎么終止線程呢?
Java雖然deprecate了一個stop,但是,提供了interrupt(),這個方法是安全的.  這個中斷方法可以將阻塞的線程喚醒過來, 但是注意 他不能將非阻塞的線程中斷. 中斷的同時,會拋出一個異常InterruptedException. 幸運的是, SocketChannel.connect() .read() 阻塞方法都會接受中斷,ClosedByInterruptException.
這時我們不輪詢變量了, 輪詢當前線程是否被中斷, 代碼
package com.test;

public class StopThread extends Thread {


    @Override
    
public void run() {
        
try {
            System.out.println(
"start");
            
while(!this.isInterrupted()) {
                
///
                
//數據處理
                ///
                
                
            }
        } 
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類, 這個類可以直接終結進程, 也就是當前線程所在的JVM. 
final static void killProcess(int pid)  其中,pid, 可以通過Process.mypid() 獲取, 但這樣終結的是整個程序, 不是我們所想要的.