黑马程序员技术交流社区
标题:
interrupt()方法使用方法
[打印本页]
作者:
﹏゛心被伱牵
时间:
2012-10-21 21:45
标题:
interrupt()方法使用方法
interrupt()方法使用方法?求解
作者:
陆建平
时间:
2012-10-21 21:52
Java Thread.interrupt() 使用不当,导致多线程程序无法正常退出。
Thread.interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。
作者:
王健宇
时间:
2012-10-21 22:00
举个例子
class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
return;
}
}
}
public class ThreadDemo {
public static void main(String args[]){
MyThread mt=new MyThread();
Thread t=new Thread(mt,"线程");
t.start();
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
return;
}
t.interrupt();
}
}
希望对你有帮助!
作者:
﹏゛心被伱牵
时间:
2012-10-22 09:44
当没有指定的方式让挂起或睡眠的线程恢复到运行状态来,这时需要冻结的线程进行清除。就好比一个上课睡觉的同学,老师走过来用棍子敲醒他。Thread类提供该方法 interrupt()来执行这个功能,强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。代码举例如下:
class StopThread implements Runnable
{
private boolean flag =true;
public synchronized void run()
{
while(flag)
{
try {
wait();
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName()+"....Exception");
}
System.out.println(Thread.currentThread().getName()+"....run");
}
}
public void changeFlag()
{
flag = false;
}
}
class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st = new StopThread();
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);
t1.start();
t2.start();
int num = 0;
while(true)
{
if(num++ == 100)
{
st.changeFlag();
t1.interrupt();
t2.interrupt(); 用棍子敲醒他,马上抛出interrupt异常
break;
}
System.out.println(Thread.currentThread().getName()+"......."+num);
}
System.out.println("over");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2