Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程在过载流量下如何中断以及为什么中断_Java_Multithreading_Interruption - Fatal编程技术网

Java 线程在过载流量下如何中断以及为什么中断

Java 线程在过载流量下如何中断以及为什么中断,java,multithreading,interruption,Java,Multithreading,Interruption,我已经实现了一个连接检查线程。当我创建了大量的流量时,我意识到有很多“ConnWatchdogThread”实例。 我认为“continue”语句会触发中断的实时线程,在这种情况下会创建新的“ConnWatchdogThread”。如果是这样,这是怎么发生的?线程是如何中断的 private class ConnWatchdog extends Thread { public ConnWatchdog(){ setName("ConnWatchdogThread"); }

我已经实现了一个连接检查线程。当我创建了大量的流量时,我意识到有很多“ConnWatchdogThread”实例。 我认为“continue”语句会触发中断的实时线程,在这种情况下会创建新的“ConnWatchdogThread”。如果是这样,这是怎么发生的?线程是如何中断的

 private class ConnWatchdog extends Thread {

 public ConnWatchdog(){
 setName("ConnWatchdogThread");
 }
      private void checkConnections() {

   //connection check 
      }

      @Override
      public void run() {

         while (true) {
            try {
               Thread.sleep(checkPeriod);
            } catch (InterruptedException e) {
//              e.prinstackTrace()

               continue;
            }

            try {

               this.checkConnections();

            } catch (Throwable t) {

            }

         }

      }
   }

创建新线程的唯一方法是使用
新线程(…)
。您的continue导致中断被忽略,使其睡眠时间延长一点

中断是一个特殊的标志(但基本上仍然只是一个标志),当你
Interrupt()
线程时,它会导致一些方法抛出InterruptedException,即使它们正在阻塞。一旦触发,标志将重置


通常,忽略esp在工作不正常的代码中抛出的异常/错误是一个坏主意。

当调用线程上的中断方法时,会发生中断。在您的示例中没有显示是什么造成了中断。给你

continue
将控制推进循环的下一次迭代。因此,当某个线程在睡眠时调用中断时,它会退出睡眠状态(清除中断标志),然后continue将其发送回循环的顶部,然后它再次进入睡眠状态,这似乎毫无意义

显示的代码中没有任何内容会导致创建新线程

使用中断退出while循环并导致线程终止会更正常。不建议对线程取消以外的事情使用中断(Java并发实践,7.1,第138页):

API或语言规范中没有任何东西将中断与任何特定的取消语义联系起来,但是在实践中,将中断用于除取消之外的任何东西都是脆弱的,并且在更大的应用程序中很难维持


您没有显示使用此类的代码。没有办法说是什么造成了这些例子。继续下去不行。事实上,您可以在ConnWatchdog first try catch中从代码中删除continue,这样就可以正常工作

发布调用ConnWatchdog/实例化它的代码,以查看完整图片。这是一个循环吗