博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I/O 阻塞 中断的注意点
阅读量:6449 次
发布时间:2019-06-23

本文共 1703 字,大约阅读时间需要 5 分钟。

---恢复内容开始---

shutdownNow() 方法:

  将向所有由ExecutorService 启动的任务发送 interrupt().进行阻断.

  但是只有任务进入到一个 (可中断的) 阻塞操作时,

  这个中断才会抛出 InterruptedExceptoin 异常.

 

需要注意的是:

[ I/O ] 和 [ synchronized 块上的等待 ] 是不可以中断的,只有通过关闭底层资源进行中断

所以在 创建I/O 任务的时候, 这意味着 I/O 具有锁住你的多线程程序的现在可能,

特别是对于基于 Web的程序.  但是nio 类的 I/O 是会自动响应中断的.

 

 

import java.sql.Time;import java.util.*;import java.util.concurrent.*;class ioTest implements Runnable{	int i =0;	@Override	public void run() {		try {			System.out.println("I can't be caught");			TimeUnit.SECONDS.sleep(1);		}catch(InterruptedException e) {			System.out.println("Caught " + e );		}	}}public class Restaurant{	public static void main(String[] args) throws Exception {		ExecutorService executorService = Executors.newCachedThreadPool();		executorService.execute(new ioTest());//执行任务		executorService.shutdownNow();	}}

  输出:

  1. I can't be caught
  2. Exit while
  3. Caught java.lang.InterruptedException: sleep interrupted

但是如果把TimeUnit.SECONDS.sleep() 放到最前面

import java.sql.Time;import java.util.*;import java.util.concurrent.*;class ioTest implements Runnable{	int i =0;	@Override	public void run() {		try {			TimeUnit.SECONDS.sleep(1);			System.out.println("I can't be caught");		}catch(InterruptedException e) {			System.out.println("Caught " + e );		}	}}public class Restaurant{	public static void main(String[] args) throws Exception {		ExecutorService executorService = Executors.newCachedThreadPool();		executorService.execute(new ioTest());//执行任务		executorService.shutdownNow();	}}

 输出:

  1. Caught java.lang.InterruptedException: sleep interrupted

 

可以得出:

  IO无法被阻断,但是TimeUnit.SECONDS.sleep 可以被阻断,并且抛出异常 InterruptedException

  如果要阻断IO 可以使用 System.out.close();

 

转载于:https://www.cnblogs.com/--zz/p/9657046.html

你可能感兴趣的文章
老师是怎么爬坑的-springCloud篇
查看>>
如何创建一个https的站点
查看>>
vim常用用法
查看>>
sqlmap命令
查看>>
13点建议,三个月,顺利搞定8千以上Java面试及笔试题
查看>>
shell练习-awk命令
查看>>
Canvas贝塞尔曲线
查看>>
Eclipse插件 Java反编译
查看>>
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
查看>>
MongoDB基本命令用法
查看>>
通过Windows Live Writer发布日志到各大博客
查看>>
hbase0.98.9中实现endpoints
查看>>
看 nova-scheduler 如何选择计算节点 - 每天5分钟玩转 OpenStack(27)
查看>>
修改默认ssh端口
查看>>
使用CocoaPods管理iOS的第三方类库
查看>>
Go 性能优化技巧 6/10
查看>>
我的Linux生涯之Mysql:Day04[Mysql之权限管理]
查看>>
javascript知识总结——标准时间与时间戳互换
查看>>
Spring @Async
查看>>
Python 函数
查看>>