该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-26
现在iteye高质量的文章大部分来自杭州了。。。
|
|
返回顶楼 | |
发表时间:2011-06-27
melin 写道 现在iteye高质量的文章大部分来自杭州了。。。
杭州是个好地方哈,还有整个阿里系都在杭州,可以考虑下 |
|
返回顶楼 | |
发表时间:2011-10-11
java并发编程实践也有类似的实现。
|
|
返回顶楼 | |
发表时间:2011-10-11
不过没有那么深入。。。。。。。。。。。。。。。。
|
|
返回顶楼 | |
发表时间:2011-10-11
agapple 写道
碧海山城 写道
说说俺的看到,Thread.isInterrupt()这种主动轮询的方法主要是在没有阻塞的时候处理的,它可以充当一个标志位的作用但是,在有阻塞的时候,比如sleep/wait他们会响应中断,抛出异常,类似socket、内部锁这种是不响应中断的,所以就死在那里了,类似你说的HTTPCLIENT超时的问题, Thread.isInterrupted 本身设计上来讲,就不能处理这种情况;
public void interrupt(){ try{ println "interruptSelf" socket.close(); }catch(IOException e){ }finally{ super.interrupt() } } 如果用FutureTask和Cancellable的话,也可以考虑覆盖FutureTask的cancel方法
FutureTask已经实现了cancel方法,也是发起了一个interrupt事件给运行的Thread,至于是否可以正常的响应中断,还是得看写任务代码的是否有处理中断异常。
你的这种处理方式也是一种思路,原理主要还是获取中断事件进行请求处理。 不过一般不建议这么做,如果是你设计一个多线程处理的tool工具,你不能假定使用者是否会正确/响应的线程中断,是把?
假设多线程处理工具的使用者不会处理中断和假设jdbc工具使用者不会sql一样无聊...
这里的技术很深,不过却不规范,如果外部建立了线程,这里把中断吃了,外部还要用怎么办?返回值这种事情,只能是自己的代码才能利用到,用其他人的类库的话,其他人怎么可能知道?
如果100%确定InterruptSupport要独占这个线程,那倒不如也把线程封装到InterruptSupport里面,这样外部就清爽多了.
|
|
返回顶楼 | |
发表时间:2011-10-11
我晕,本来以为是用sun包里的native代码之类的东西进行立即中断
跑了一下代码,发现实际上还是利用了,关闭顶级资源让下级操作立即失败的方法进行的中断 |
|
返回顶楼 | |
发表时间:2011-10-11
gtssgtss 写道 我晕,本来以为是用sun包里的native代码之类的东西进行立即中断
跑了一下代码,发现实际上还是利用了,关闭顶级资源让下级操作立即失败的方法进行的中断 java底层是支持强制中断的,只是不建议你用而已。 http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html Interruptible事件钩子,只能是允许你定义callback方法进行interrput监听,比如设置关闭变量等,或者关闭其依赖的资源。 |
|
返回顶楼 | |
发表时间:2011-10-11
你现在的InterruptSupport是不会抛出InterruptedException的...你代码复制的时候是不是遗漏了什么
|
|
返回顶楼 | |
发表时间:2011-10-28
学习学习,interrupt的确关注不多
|
|
返回顶楼 | |