线程中断方法。

/* *

  • @Created with IntelliJ IDEA.
  • @Description: 中断:把一个正在执行的线程,紧急停止下来,典型的两种实现方法:
  •   一、通过一个标记位的形式来进行中断。
    
  •     标记位的终止方法比较温和,必须要每次线程内部主动检查的时候,才会触发终止操作。
    
  •   二、借助 interupt 方法进行中断。
    
  •     这个方法并不是直接把线程中断掉,而是让线程内部抛出一个InterruptException异常,
    
  •     至于代码中如何处理这个异常,就是程序员自身考虑的事。
    

*/
public class ThreadDemo {
// 这个变量用来表示当前线程是否为退出的状态

private static boolean isQuit = false;

public static void main(String[] args) throws InterruptedException {

    // 一、通过一个标记位的形式来进行中断。
    Thread thread1 = new Thread() {
        @Override
        public void run() {
            while (!isQuit) {
                System.out.println("我正忙着转账呢!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("转账被终止!");
        }
    };
    thread1.start();

    Thread.sleep(5000);
    System.out.println("对方是内鬼,终止交易!");
    isQuit = true;
}

  /*
    二、借助 interupt 方法进行中断。
    1.如果是通过继承Thread 的方式来创建出来的线程,
      此时 currentThread() 操作相当于this.
    2.如果是通过实现Runnable/lambda方式来创建线程,
      此时必须通过currentThread()才能回到当前线程的实力
     */
public static void main1(String[] args) throws InterruptedException {

    Thread thread2 = new Thread() {
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("我正忙着交易呢!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //e.printStackTrace();
                    break;
                    // t.interrupt() 会让 t 这个线程内部触发一个异常,
                    // 当捕捉到这个异常的时候,就可以让循环结束。
                }
            }
            System.out.println("交易被警察打断!");
        }
    };
    thread2.start();

    Thread.sleep(5000);
    System.out.println("条子来了,终止交易!");
    thread2.interrupt();
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值