腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
dylanliu
专栏成员
举报
121
文章
120750
阅读量
25
订阅数
订阅专栏
申请加入专栏
全部文章(121)
编程算法(34)
java(30)
spring(14)
linux(8)
面向对象编程(7)
api(6)
python(5)
javascript(5)
sql(5)
node.js(4)
xml(4)
数据库(4)
http(4)
网络安全(4)
html(3)
mvc(3)
ide(3)
maven(3)
腾讯云测试服务(3)
正则表达式(3)
安全(3)
其他(2)
c++(2)
php(2)
go(2)
bash(2)
scala(2)
github(2)
bash 指令(2)
文件存储(2)
日志服务(2)
网站(2)
shell(2)
jdk(2)
spring boot(2)
jdbc(2)
windows(2)
数据结构(2)
haskell(2)
factory(2)
function(2)
product(2)
set(2)
费用中心(1)
官方文档(1)
perl(1)
jsp(1)
css(1)
json(1)
android(1)
汇编语言(1)
硬件开发(1)
云数据库 SQL Server(1)
云数据库 Redis(1)
postgresql(1)
ruby on rails(1)
打包(1)
git(1)
svn(1)
jar(1)
tomcat(1)
unix(1)
centos(1)
命令行工具(1)
数据加密服务(1)
DevOps 解决方案(1)
xslt & xpath(1)
容器(1)
存储(1)
开源(1)
分布式(1)
自动化(1)
ssh(1)
yum(1)
aop(1)
单元测试(1)
敏捷开发(1)
架构设计(1)
云数据库 postgresql(1)
mqtt(1)
虚拟化(1)
abstract(1)
action(1)
agent(1)
app(1)
build(1)
builder(1)
combinations(1)
components(1)
constraints(1)
cpu(1)
data(1)
element(1)
integer(1)
jmx(1)
key(1)
map(1)
medium(1)
notifications(1)
object(1)
output(1)
parentheses(1)
return(1)
server(1)
sort(1)
static(1)
tcp(1)
var(1)
window(1)
产品(1)
加密(1)
浏览器(1)
排序(1)
设计模式(1)
图表(1)
搜索文章
搜索
搜索
关闭
java中断机制zz
c++
java
一般的代码中,尤其是作为一个基础类库时,绝不应当吞掉中断,即捕获到InterruptedException后在catch里什么也不做,清除中断状态后又不重设中断状态也不抛出InterruptedException等。因为吞掉中断状态会导致方法调用栈的上层得不到这些信息。 当然,凡事总有例外的时候,当你完全清楚自己的方法会被谁调用,而调用者也不会因为中断被吞掉了而遇到麻烦,就可以这么做。 总得来说,就是要让方法调用栈的上层获知中断的发生。假设你写了一个类库,类库里有个方法amethod,在amethod中检测并清除了中断状态,而没有抛出InterruptedException,作为amethod的用户来说,他并不知道里面的细节,如果用户在调用amethod后也要使用中断来做些事情,那么在调用amethod之后他将永远也检测不到中断了,因为中断信息已经被amethod清除掉了。如果作为用户,遇到这样有问题的类库,又不能修改代码,那该怎么处理?只好在自己的类里设置一个自己的中断状态,在调用interrupt方法的时候,同时设置该状态,这实在是无路可走时才使用的方法。 2、 中断的响应 程序里发现中断后该怎么响应?这就得视实际情况而定了。有些程序可能一检测到中断就立马将线程终止,有些可能是退出当前执行的任务,继续执行下一个任务……作为一种协作机制,这要与中断方协商好,当调用interrupt会发生些什么都是事先知道的,如做一些事务回滚操作,一些清理工作,一些补偿操作等。若不确定调用某个线程的interrupt后该线程会做出什么样的响应,那就不应当中断该线程。 4. Thread.interrupt VS Thread.stop Thread.stop方法已经不推荐使用了。而在某些方面Thread.stop与中断机制有着相似之处。如当线程在等待内置锁或IO时,stop跟interrupt一样,不会中止这些操作;当catch住stop导致的异常时,程序也可以继续执行,虽然stop本意是要停止线程,这么做会让程序行为变得更加混乱。 那么它们的区别在哪里?最重要的就是中断需要程序自己去检测然后做相应的处理,而Thread.stop会直接在代码执行过程中抛出ThreadDeath错误,这是一个java.lang.Error的子类。 在继续之前,先来看个小例子: 01 package com.ticmy.interrupt; 02 import java.util.Arrays; 03 import java.util.Random; 04 import java.util.concurrent.TimeUnit; 05 public class TestStop { 06 private static final int[] array = new int[80000]; 07 private static final Thread t = new Thread() { 08 public void run() { 09 try { 10 System.out.println(sort(array)); 11 } catch (Error err) { 12 err.printStackTrace(); 13 } 14 System.out.println("in thread t"); 15 } 16 }; 17 18 static { 19 Random random = new Random(); 20 for(int i = 0; i < array.length; i++) { 21 array[i] = random.nextInt(i + 1); 22 } 23 } 24 25 private static int sort(int[] array) { 26 for (int i = 0; i < array.length-1; i++){ 27 for(int j = 0 ;j < a
Dylan Liu
2019-07-01
685
0
868. Binary Gap
c++
Given a positive integer N, find and return the longest distance between two consecutive 1's in the binary representation of N.
Dylan Liu
2019-07-01
405
0
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
立即查看
Python精品学习库
代码在线跑,知识轻松学
立即查看
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档