/*
 时间:2015年3月12日16:06:24
 测试的是Interruput方法,和sleep方法的理解。
 先把两个方法的生命摘录如下:
  public static void sleep(long millis) throws InterruptedException;在指定的毫秒内让当前正在执行的线程休眠(暂停执行)
  public static void sleep(long millis, int nanos)
                  throws InterruptedException; 在指定的毫秒内加纳秒内让正在执行的线程休眠(暂时休眠)。
    public void interrupt();中断线程。
  public static boolean isInterrupted();测试当前线程是否已经中断。
  public final boolean isAlive();测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。
 currentThread
 public static Thread currentThread();该方法返回当前正在执行线程的引用。
 
 根据该程序运行的结果,可以看出程序的执行流程是这样的:
  先通过继承创建了新的线程m,也就是说程序在执行到m.start()的时候,存在了两条不同的执行路径。
  然后还是执行main线程中的接着三条打印语句。
  然后进入try部分,有可能发生异常。此时当前线程也就是main线程休眠了10000毫秒,也就是10秒钟。
  这十秒钟让其他的线程,在这里,我们可视的是m线程。也就是在这10秒钟,都由m线程单独执行。
  进入m线程的run线程体,程序开始执行m线程。
  定义flag变量,进入while循环,循环体中每次打印一下当前时间。然后当前线程休眠(暂时休眠),因为只休眠1秒钟(而同时main线程要修庙10秒钟)
  所以1秒钟后继续执行m线程的线程体中剩下的部分。…………
  
  10秒过后,主线程不再休眠,开始执行了,
  打印了main线程!
  
  打印当前线程的名字
  打印当前线程(main)是否中断
  打印m线程是否中断
  调用interrupt方法中断m线程,但是此刻main线程仍在运行
  被m线程内的catch捕获
  然后进入catch块
  打印了发生了InterruptedException异常
  打印了打印了InterruptedException异常的栈轨迹
  打印了m是否中断
  可以看出默认的main线程的名字的确就是main
  

*/ 
 
 import java.util.Date; 

  public class TestInterrupt { 
 
  public static void main(String[] args) { 
 
   MyThread m = new MyThread(); 
 
   m.start(); 
 
   System.out.println("main线程。"); 
 
   System.out.println(Thread.currentThread().isInterrupted()); 
 
   System.out.println(m.isInterrupted()); 
 
   try { 
 
    Thread.sleep(10000); 
 
   } catch (InterruptedException e) { 
 
    e.printStackTrace(); 
 
   } 
 
   System.out.println("main线程!"); 
 
   System.out.println(Thread.currentThread().getName()); 
 
   System.out.println(Thread.currentThread().isInterrupted()); 
 
   System.out.println(m.isInterrupted()); 
 
   m.interrupt();    
 
  } 
 
 } 

  class MyThread extends Thread { 
 
  public void run() { 
 
   boolean flag = true; 
   while (flag) { 
 
    System.out.println("--------" + new Date() + "----------------"); 
    try { 
 
     Thread.sleep(1000); 
 
    } catch (InterruptedException e) { 
 
     System.out.println("发生了InterruptedException异常"); 
 
     e.printStackTrace(); 
 
     System.out.println("打印了InterruptedException异常的栈轨迹"); 
 
     System.out.println(this.isInterrupted()); 
 
     return ; 
 
    } 
 
   } 
 
  } 
 
 } 
 
 /*


 



main线程。
false
false
--------Thu Mar 12 16:34:31 CST 2015----------------
--------Thu Mar 12 16:34:32 CST 2015----------------
--------Thu Mar 12 16:34:33 CST 2015----------------
--------Thu Mar 12 16:34:34 CST 2015----------------
--------Thu Mar 12 16:34:35 CST 2015----------------
--------Thu Mar 12 16:34:36 CST 2015----------------
--------Thu Mar 12 16:34:38 CST 2015----------------
--------Thu Mar 12 16:34:39 CST 2015----------------
--------Thu Mar 12 16:34:40 CST 2015----------------
--------Thu Mar 12 16:34:41 CST 2015----------------
main线程!
main
false
false
发生了InterruptedException异常
java.lang.InterruptedException: sleep interrupted
        at java.lang.Thread.sleep(Native Method)
        at MyThread.run(TestInterrupt.java:53)
打印了InterruptedException异常的栈轨迹




*/