就像有些人,当前不联系,就再也不会联系见面了
原帖
某一天,某大神甩给我一个例子,让我跑一下。
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
public class InterruptionTest {
public static void main(String[] args) throws
InterruptedException,
TimeoutException,
ExecutionException {
AtomicInteger counter = new AtomicInteger(0);
ExecutorService service = Executors.newFixedThreadPool(1);
final Future<?> future = service.submit(
() -> {
while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
// break;
continue;
}
System.out.println("running... times:" + counter.incrementAndGet());
}
return counter.get();
});
final Object o;
try {
o = future.get(5, TimeUnit.SECONDS);
System.out.println(o);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally{
future.cancel(true);
}
service.shutdown();
service.awaitTermination(10, TimeUnit.SECONDS);
}
}
跑完之后是
如果将`continue
`换成`break`
,程序抛出异常就停止了。
使用`continue`
程序不停止的原因是,抛出 `interruptedException`
的时候,中断标志位自动清除了
如果把`try catch`
放在`while`
外面,也可以结束了