需要示例程序才能抛出InterruptedException

时间:2010-09-04 12:53:53

标签: java multithreading

我正在浏览 kathy sierra SCJP 1.5第9章(主题),并提到它:

  

请注意,sleep()方法可以抛出已检查的InterruptedException   (你通常会知道这是否可能,因为另一个线程必须明确地做   中断),所以你必须用句柄或声明

来确认异常

我只需要一个示例程序来了解它何时发生(我可以在我的机器上运行)?

我用Google搜索但找不到任何示例代码来测试此功能..

先谢谢

2 个答案:

答案 0 :(得分:22)

以下是一个例子:

public class Test
{
    public static void main (String[] args)
    {
        final Thread mainThread = Thread.currentThread();

        Thread interruptingThread = new Thread(new Runnable() {
            @Override public void run() {
                // Let the main thread start to sleep
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                mainThread.interrupt();
            }
        });

        interruptingThread.start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            System.out.println("I was interrupted!");
        }
    }
}

要完成它:

  • 设置一个新的线程,它将暂停一段时间,然后中断主线程
  • 开始新线程
  • 长时间睡眠(在主线程中)
  • 当我们被打断时(再次,在主线程中)打印出诊断方法

主线程中的睡眠不是严格必需,但这意味着主线程确实在它被中断之前真正开始睡眠。

答案 1 :(得分:-1)

public class SleepTest1 extends Thread {
@Override
public void run() {
    try {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName());
            Thread.sleep(1000);
            Thread.currentThread().interrupt();
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    SleepTest1 st1 = new SleepTest1();
    st1.start();
}

}