我怎样才能找到我的线程中断的位置?

时间:2015-01-27 23:06:46

标签: java multithreading netbeans

我可能无意中改变了我项目中的某些内容。现在,当一个关键线程不应该被中断时,isInterrupted在线程应该运行时返回true。

因为没有人会为我找到问题所以我会在找到它的方法上寻求帮助。我需要找到:

  • 最好是线程实际中断的位置,并在程序运行时在控制台中输出
  • 或代码中被中断的所有地方并逐一评论

因为IDE工具和调试器可能在我的搜索中起作用,所以我将使用NetBeans IDE添加它。

1 个答案:

答案 0 :(得分:4)

您可以在特殊线程下运行它,该线程在中断时记录堆栈:

// A simple process.
class Process implements Runnable {

    @Override
    public void run() {
        try {
            while (true) {
                Thread.sleep(1000L);
            }
        } catch (InterruptedException ex) {
            System.out.println("Interrupted");
        }
    }

}

public void test() throws InterruptedException {
    Thread t = new Thread(new Process()) {
        @Override
        public void interrupt() {
            // Log a stack trace when iterrupted.
            new Exception("Where the hell did that come from!").printStackTrace(System.out);
            // Pass it up the chain.
            super.interrupt();
        }
    };
    t.start();
    Thread.sleep(2048);
    t.interrupt();
    t.join();
}