一般情况下,线程在处理完之后,会自动关闭。但当线程中是进行循环操作时,就需要设置一定的条件,来使它安全退出。
Java 之前有个api函数可以直接关闭线程, stop(), 后来, 取消了. 其替代的方式主要有两种:
1. 自己加入一个成员变量, 我们在程序的循环里面, 轮流的去检查这个变量, 变量变化时, 就会退出这个线程. 代码示例如下package com.test;
1 public class StopThread extends Thread { 2 3 private boolean _run = true; 4 public void stopThread(boolean run) { 5 this._run = !run; 6 } 7 8 @Override 9 public void run() { 10 while(_run) { 11 //数据处理 12 } 13 //super.run(); 14 } 15 16 public static void main(String[] args) { 17 StopThread thread = new StopThread(); 18 //开始线程 19 thread.start(); 20 try { 21 Thread.sleep(1000); 22 } catch (InterruptedException e) { 23 e.printStackTrace(); 24 } 25 //停止线程 26 thread.stopThread(true); 27 } 28 }
1 public class StopThread extends Thread { 2 3 @Override 4 public void run() { 5 try { 6 System.out.println("start"); 7 while(!this.isInterrupted()) { 8 //数据处理 9 } 10 } catch (Exception e) { 11 e.printStackTrace(); 12 } 13 System.out.println("stop"); 14 //super.run(); 15 } 16 17 public static void main(String[] args) { 18 StopThread thread = new StopThread(); 19 thread.start(); 20 try { 21 Thread.sleep(1000); 22 } catch (InterruptedException e) { 23 e.printStackTrace(); 24 } 25 26 thread.interrupt(); 27 System.out.println("interrupt"); 28 } 29 }
3. Android 在自己的Api中加入了,Process类, 这个类可以直接终结进程, 也就是当前线程所在的JVM. final static void killProcess(int pid) 其中,pid, 可以通过Process.mypid() 获取, 但这样终结的是整个程序, 不是我们所想要的.