线程 Thread 的 Interrupt 和 isInterrupted 打断线程的使用。

来源:互联网 发布:php无法调用mysql函数 编辑:程序博客网 时间:2024/05/29 04:35

 Interrupt 能够和 isInterrupted  配合使用打断正在执行的线程。


package com.yuxin.learn;import java.io.IOException;import java.util.Scanner;import java.util.concurrent.ThreadPoolExecutor;public class Main {public static void main(String[] args) throws IOException{System.out.println("线程"+Thread.currentThread().getId()+"进入线程");Main test = new Main();MyThread myThread = test.new MyThread();myThread.start();try {Thread.currentThread().sleep(2000);} catch (Exception e) {// TODO: handle exception}myThread.interrupt();}class MyThread extends Thread{@Overridepublic void run() {System.out.println("线程"+Thread.currentThread().getId()+"进入线程");int i=0;//使用下面两种判断条件可以分别使线程 能够 和 不能够 被打断while( !isInterrupted()  &&i<Integer.MAX_VALUE){//while(i<Integer.MAX_VALUE){System.out.println(i+" :while循环");i++;}if(i!=Integer.MAX_VALUE)System.out.println("由于while循环加入了isInterrupted作为判断条件,线程被打断了。");}}}



输出

...184208 :while循环184209 :while循环184210 :while循环184211 :while循环184212 :while循环由于while循环加入了isInterrupted作为判断条件,线程被打断了。

但是一般情况下不建议通过这种方式来中断线程,一般会在MyThread类中增加一个属性 isStop来标志是否结束while循环,然后再在while循环中判断isStop的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyThread extends Thread{
        private volatile boolean isStop = false;
        @Override
        public void run() {
            int i = 0;
            while(!isStop){
                i++;
            }
        }
         
        public void setStop(boolean stop){
            this.isStop = stop;
        }
    }

   那么就可以在外面通过调用setStop方法来终止while循环。



0 0
原创粉丝点击