package SleepTest;
public class Test extends Thread {
public static void main(String argus[]) {
Test s = new Test();
Another a = new Another(Thread.currentThread());
try {
Thread myThread = new Thread(a);
myThread.start();
s.selfSleep(10000);
}catch (Exception ex){
//會有InterruptedException發生但是為什為isInterrupted傳回值是false???
System.out.println("current thread is " + Thread.currentThread() + ", is interrupted, " + s.isInterrupted());
System.out.println(">_<" + ex.getMessage());
}
try {
s.selfSleep(2000);//sleep again
}catch (Exception ex) {
System.out.println("sleep again");
ex.printStackTrace();
}
}
public void selfSleep(int mill) {
try {
Thread.sleep(mill);
System.out.println("after sleep " + mill + " millsec");
}
catch (Exception ex) {
System.out.println("Test selfsleep, isinterruptered, " + this.isInterrupted());
ex.getMessage();
ex.printStackTrace();
}
}
}
class Another implements Runnable {
Thread original;
Another(Thread original) {
this.original = original;
}
public void run() {
try {
System.out.println("Another Object, sleep 5 sec");
Thread.sleep(5000);
System.out.println("Another Object ready to interrupt : " + this.original);
this.original.interrupt();
}catch (Exception ex) {
System.out.println(">_< in Another " + ex.getMessage());
}
}
}
--------------------------
Another Object, sleep 5 sec
Another Object ready to interrupt : Thread[main,5,main]
Test selfsleep, isinterruptered, false
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at SleepTest.Test.selfSleep(Test.java:34)
at SleepTest.Test.main(Test.java:14)
after sleep 2000 millsec
这是执行结果,,,为什么这句:
System.out.println("Test selfsleep, isinterruptered, " + this.isInterrupted());为false啊》》请教,
public class Test extends Thread {
public static void main(String argus[]) {
Test s = new Test();
Another a = new Another(Thread.currentThread());
try {
Thread myThread = new Thread(a);
myThread.start();
s.selfSleep(10000);
}catch (Exception ex){
//會有InterruptedException發生但是為什為isInterrupted傳回值是false???
System.out.println("current thread is " + Thread.currentThread() + ", is interrupted, " + s.isInterrupted());
System.out.println(">_<" + ex.getMessage());
}
try {
s.selfSleep(2000);//sleep again
}catch (Exception ex) {
System.out.println("sleep again");
ex.printStackTrace();
}
}
public void selfSleep(int mill) {
try {
Thread.sleep(mill);
System.out.println("after sleep " + mill + " millsec");
}
catch (Exception ex) {
System.out.println("Test selfsleep, isinterruptered, " + this.isInterrupted());
ex.getMessage();
ex.printStackTrace();
}
}
}
class Another implements Runnable {
Thread original;
Another(Thread original) {
this.original = original;
}
public void run() {
try {
System.out.println("Another Object, sleep 5 sec");
Thread.sleep(5000);
System.out.println("Another Object ready to interrupt : " + this.original);
this.original.interrupt();
}catch (Exception ex) {
System.out.println(">_< in Another " + ex.getMessage());
}
}
}
--------------------------
Another Object, sleep 5 sec
Another Object ready to interrupt : Thread[main,5,main]
Test selfsleep, isinterruptered, false
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at SleepTest.Test.selfSleep(Test.java:34)
at SleepTest.Test.main(Test.java:14)
after sleep 2000 millsec
这是执行结果,,,为什么这句:
System.out.println("Test selfsleep, isinterruptered, " + this.isInterrupted());为false啊》》请教,
当本线程捕获这个异常的时候,会清除这个标志。
所以catch语句会永远报告说isInterrupted( )是false。