协作,才能更好的中断线程
聊起中断,大家可能最熟悉的例子就是线程休眠。下面就是一个线程休眠的 demo,在这个例子中,当我们调用 sleep 方法,该方法将会抛出一个需要捕获的中断异常,这里捕获该异常并直接返回。 for (int i = 0; i < somethings.size(); i++) { // 休眠 4 s try { Thread.sleep(4000); } catch (InterruptedException e) { // 抛出中断异常 return; } // 输出 System.out.println(somethings.get(i)); } 除了 InterruptedException 中断异常,另外还有三个中断相关的方法,三个方法都与线程相关。 thread#interrupt Thread#interrupted thread#isInterrupted interrupt 方法用于中断线程,但是并不是说该方法就能 直接使线程停止 。 下面使用 interrupt 中断线程,这里我们期望中断直接停止子线程输出。但是当主线程调用子线程 interrupt 方法,子线程并却没有被终止,还在继续打印数字。 Runnable interruptedTask=new Runnable() { @Override public void run() { for (int i =