二、对于处于sleep,join等操作的线程,如果被调用interrupt()后,会抛出InterruptedException,然后线程的中断标志位会由true重置为false,因为线程为了处理异常已经重新处于就绪状态。
我在运行thinking in java里中断的例子时,一直都很奇怪为什么在catch(InterruptedException e)的处理段里,thead.isInterrupted()返回的都是false,原来是已被重置。
四、不可中断的操作,包括进入synchronized段以及Lock.lock(),inputSteam.read()等,调用interrupt()对于这几个问题无效,因为它们都不抛出中断异常。如果拿不到资源,它们会无限期阻塞下去。
对于Lock.lock(),可以改用Lock.lockInterruptibly(),可被中断的加锁操作,它可以抛出中断异常。等同于等待时间无限长的Lock.tryLock(long time, TimeUnit unit)。
对于inputStream等资源,有些(实现了interruptibleChannel接口)可以通过close()方法将资源关闭,对应的阻塞也会被放开。
文章转自http://freewind886.blog.163.com/blog/static/6619246420107823439357/
相关推荐
C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,
线程问题解决线程问题解决线程问题解决线程问题解决线程问题解决
用户接口 进程管理 处理机管理 存储管理 文件系统 外部设备管理
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
Java 中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。即“线程中断”并不是字面意思——线程真的中断了,而是设置了中断标志...
java线程中断之interrupt和stop.docx
文档中讲解了C#中在使用多线程,跨线程操作时报错“线程间操作无效: 从不是创建控件“…”的线程访问它”的解决办法。
C#多线程解决界面卡死问题的完美解决方案,简化了之前的写法,更容易记住和理解 C#多线程解决界面卡死问题的完美解决方案,简化了之前的写法,更容易记住和理解
C# 高效线程安全,解决多线程写txt日志类
Java线程中断示例程序的代码清单.pdf 学习资料 复习资料 教学资源
C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 没分的朋友...
---------------------------------------------------Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
例如: for (int i = 0; i ; i++) { ...如何关闭其中的一个线程呢? 请下载解决方案。 呵呵,这个实例10分值的买, 觉得好的话就评个分吧,评分后会返回你11分 (一定要评分,光评论是不返分的)
多线程同步解决卖票问题
为了解决多线程访问公共资源的冲突,开发人员需要采用线程同步机制,来避免同一时刻多个线程访问公共资源;该程序使用事件对象进行线程同步;事件对象分为人工重置事件对象和自动重置事件对象。
多线程机制,你懂得。。多多多多多下载,谢谢支持,办板报的了,歇息一下
线程问题总结:多线程实现方式、线程控制、多线程安全问题以及解决方法、单例懒汉式的线程安全问题、死锁出现的原因
} catch (InterruptedException e) {//处理完中断异常后,返回到run()方法入口//如果没有return,线程不会实际被中断,
winform datagridview多线程出现红叉解决方案,只要将运行的代码由创建线程调用就OK了
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。