/*
时间: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;
时间: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();
}
}
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 ;
}
}
}
}
/*
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异常的栈轨迹
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异常的栈轨迹
*/