使用interrupt()方法和isInterrupted()方法更好的实现主线程和子线程的配合

来源:互联网 发布:手机淘宝无法评价订单 编辑:程序博客网 时间:2024/06/04 19:31
在java的线程Thread类中有三个方法,
(1)interrupt:置线程的中断状态
(2)isInterrupt:线程是否中断

(3)interrupted:返回线程的上次的中断状态,并清除中断状态

如果A线程去做一些A任务(比如下载数据)的时候,期望B线程来做一些B任务(比如刷新界面显示状态)。等到A任务做完的时候,我们希望这时候来关闭B线程。如果使用interrupt()方法和isInterrupted()就很好实现.

package interrupttest;class MyThread extends Thread{      int count = 0;      @Override      public void run() {          // TODO Auto-generated method stub          System.out.println(getName()+"将要运行...");          while (!this.isInterrupted()) {              System.out.println(getName()+"运行中..."+count++);              try {                  Thread.sleep(400);//休眠400毫秒                  //执行B任务                 } catch (InterruptedException e)                 {                //退出阻塞时捕获异常                 // TODO: handle exception                 System.out.println(getName()+"从阻塞状态中退出...");                 this.interrupt();                //改变线程状态,使循环结束                }            }        System.out.println(getName()+"已经终止了线程...");        }    }

-----------------------

package interrupttest;public class InterruptTest {public static void main(String[] args) {MyThread myThread = new MyThread();myThread.setName("MyThread");myThread.start();try {Thread.sleep(4000);//主线程休息2秒,好让其他线程运行 //执行B任务System.out.println(myThread.getName()+"开始准备终止线程...");myThread.interrupt();}catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();} }}