A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© frankzheng329 中级黑马   /  2015-4-30 01:01  /  648 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到视频说用interrupt() 方法. 那么会造成死锁的情况吗?

3 个回复

倒序浏览
1、首先在继承或者实现的子类成员定义一个布尔值变量。2、run()方法中用判断布尔值括住while(true)的整个循环方法。3、你在主线程自定义一个循环,然后循环内做一个判断,在一定条件才使 (1)步骤中的布尔值改变。就停了
回复 使用道具 举报
可以采用标志位方法.但是如果是被sleep和wait的时候作用不大. 推荐使用中断异常机制.代码如下:
  1. public class InterruptedThreadDemo {

  2.     public static void main(String[] args) {

  3.         // 子线程开启
  4.         ThreadTerminal tt = new ThreadTerminal();
  5.         tt.start();

  6.         try {
  7.             // 主线程休息3s,然后打断子线程
  8.             Thread.sleep(3000);
  9.         } catch (InterruptedException e) {
  10.             e.printStackTrace();
  11.         }
  12.         // 打断子线程
  13.         tt.interrupt();
  14.     }
  15. }

  16. class ThreadTerminal extends Thread {
  17.     private int counter = 0;

  18.     public void run() {
  19.         synchronized (this) {
  20.             while (true) {

  21.                 System.out.println("time = " + System.currentTimeMillis());
  22.                 counter++;
  23.                 try {
  24.                     if (counter == 5) {
  25.                         // 使线程处于阻塞状态
  26.                         wait();
  27.                     }
  28.                 } catch (InterruptedException e) {
  29.                     // 捕获InterruptedException,然后退出程序
  30.                     System.out.println("捕获到InterruptedException , 线程结束");
  31.                     return;
  32.                 }
  33.             }

  34.         }
  35.     }
  36. }
复制代码


另外,我们还要注意:
1,每个线程都有一个boolean类型的中断状态.当中断线程时,这个线程的中断状态将被设置为true.
2,interrupt方法能够中断目标线程,而isInterrupted方法能返回目标线程的中断状态.静态的interrupted方法将清除当前线程的中断状态,并返回它之前的值,这也是清除中断状态的唯一方法.
3,响应中断执行的操作: 清除中断状态, 抛出InterruptedException,表示阻塞操作由于中断提前结束.JVM并不能保证阻塞方法检测到中断的速度,但在实际情况中响应速度还是非常快的.

4,调用interrupt并不意味着立即停止目标线程正在进行的工作,而只是传递了请求中断的消息.

5,一般而言,中断是实现取消的最合理方式

如有疑问可以继续探讨
回复 使用道具 举报
来学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马