Java 设计可中断的可运行程序

Java 设计可中断的可运行程序,java,multithreading,Java,Multithreading,将run方法的内容包装在while循环中就足够了吗?while循环检查线程是否被中断以使任何线程都可中断 public void run () { while (!Thread.interrupted()) { do something. } } 线程如何支持自己的中断?这取决于什么 目前正在进行。如果线程经常调用方法 如果抛出InterruptedException,它只会从run方法返回 在它捕捉到异常之后 例如,如果你的线程在工作中睡眠更好,那么最好捕获中断异

将run方法的内容包装在while循环中就足够了吗?while循环检查线程是否被中断以使任何线程都可中断

public void run () {
  while (!Thread.interrupted()) {
     do something.
  }    
}
线程如何支持自己的中断?这取决于什么 目前正在进行。如果线程经常调用方法 如果抛出InterruptedException,它只会从run方法返回 在它捕捉到异常之后

例如,如果你的线程在工作中睡眠更好,那么最好捕获
中断异常

public void run(){
 while(true)
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        // We've been interrupted: no more messages.
        return;
    }
}
如果线程长时间运行,您可以定期检查invoke thread.interrupted,如果收到中断,它将返回true。

interrupted()是检查当前线程是否中断的静态方法。isInterrupted()是检查调用的线程对象的实例。 目前使用的螺纹

if(!(Thread.interrupted())){//do something}
当线程对象调用use
if(myThread.isInterrupted()){//do

}

Quoi,这适用于关闭主类中的执行器并向运行线程发送中断异常的情况。线程需要停止对该异常执行操作。如果在run()中捕获了INterruptedException,我们可以返回。但是,如果run也调用一些有catch(异常e)块的方法,那么如果我只是从线程内部从这些方法中抛出e,并最终从run-catch块返回,这仍然有效吗?这取决于线程的工作情况。如果线程进入睡眠状态,并且您的
执行器
肯定已关闭,那么就会出现一种奇怪的情况,即线程将引发一个
中断异常
,这是线程中断管理的典型情况。(C++)boost中断点提到了相同的功能方式,线程可以“实现”外部代理发出的终止信号,仅在“中断点”上。文件上说是屈服点或同步点。它并不特定于Java,这是因为OS很少提供“杀死线程”的接口。我认为旧版本的Windows确实存在,但它已经不存在了。因此,如果您需要退出自己,您必须协同检查线程逻辑。在我的例子中,数据库操作主要发生在meothd中,而不是run中。如果关机在建立某些连接时发送了中断,是否将其视为等同于睡眠?请注意,并非所有代码都可以中断。