精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-19
最后修改:2010-08-05
★ 线程状态
//无法中断正在运行的线程代码 class TestRunnable implements Runnable{ public void run(){ while(true) { System.out.println( "Thread is running..." ); long time = System.currentTimeMillis();//去系统时间的毫秒数 while((System.currentTimeMillis()-time < 1000)) { //程序循环1秒钟,不同于sleep(1000)会阻塞进程。 } } } } public class ThreadDemo{ public static void main(String[] args){ Runnable r=new TestRunnable(); Thread th1=new Thread(r); th1.start(); th1.interrupt(); } } //运行结果:一秒钟打印一次Thread is running...。程序没有终止的任何迹象 上面的代码说明interrupt()并没有中断一个正在运行的线程,或者说让一个running中的线程放弃CPU。那么interrupt到底中断什么。 //Interrupted的经典使用代码 public void run(){ try{ .... while(!Thread.currentThread().isInterrupted()&& more work to do){ // do more work; } }catch(InterruptedException e){ // thread was interrupted during sleep or wait } finally{ // cleanup, if required } } 很显然,在上面代码中,while循环有一个决定因素就是需要不停的检查自己的中断状态。当外部线程调用该线程的interrupt 时,使得中断状态置位。这是该线程将终止循环,不在执行循环中的do more work了。 //中断一个被阻塞的线程代码 class TestRunnable implements Runnable{ public void run(){ try{ Thread.sleep(1000000); //这个线程将被阻塞1000秒 }catch(InterruptedException e){ e.printStackTrace(); //do more work and return. } } } public class TestDemo2{ public static void main(String[] args) { Runnable tr=new TestRunnable(); Thread th1=new Thread(tr); th1.start(); //开始执行分线程 while(true){ th1.interrupt(); //中断这个分线程 } } } /*运行结果: java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at TestRunnable.run(TestDemo2.java:4) at java.lang.Thread.run(Unknown Source)*/
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3827 次