Thread.interrupt(),就是置状态。
public void run() {
//死循环执行打印"I am running!" 和做消耗时间的浮点计算
while (true) {
System.out.println("I am running!");
for (int i = 0; i < 900000; i++) {
d = d + (Math.PI + Math.E) / d;
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("**************************** "+Thread.currentThread().isInterrupted());
}
//给线程调度器可以切换到其它进程的信号
Thread.yield();
}
}
主线程要
//将任务交给一个线程执行
Thread t = new Thread(new ATask());
t.start();
//运行一断时间中断线程
while(true)
{
Thread.sleep(100);
System.out.println("11111111****************************");
System.out.println("Interrupted Thread!");
System.out.println("11111111****************************");
System.out.println("11111**************************** before is interrupted? "+t.isInterrupted());
t.interrupt();
System.out.println("11111**************************** after is interrupted? "+t.isInterrupted());
}
主线程要interrupt次线程的话,那么次线程有普通代码块,就是除去,wait, sleep,join等方法时的普通代码块。由于主次线程时间片切换的问题,那么t.isInterrupted = false, t.interrupt(),可能是时间片没有切换过去,或者切换过去了,但是次线程是普通代码块,然后又切换到主线程,t.isinterrupted= true. 如果时间片切换到
次线程sleep方法,次线程会跑出一个异常,跑到catch块中 了,所以isInterrupted= false.我自己是这么理解
类似linux系统中的信号量。