网上搜了一些关于超时控制的问题
大多是使用守护线程作为计时器,
然后在计时器的start和cancel方法中写超时代码
可是系统给出超时Exception确实该守护线程的报错
不能在主线程中收到这种报错信息
这个就不能够起到超时控制的作用了请问大家还有其他的方案能够控制住超时代码不?
或者思路想法什么的
大家交流下
大多是使用守护线程作为计时器,
然后在计时器的start和cancel方法中写超时代码
可是系统给出超时Exception确实该守护线程的报错
不能在主线程中收到这种报错信息
这个就不能够起到超时控制的作用了请问大家还有其他的方案能够控制住超时代码不?
或者思路想法什么的
大家交流下
解决方案 »
- 配了servlet却无法访问
- jboss6部署SSH2项目,发现jboss不能解析spring的注解, 启动失败。
- java class 映射 遍历对象属性 对属性做编码
- dwr 反向Ajax 可以控制所在页面之外的页面吗?
- 写一个java程序,实现对一个二维数组按指定的列集进行排序?
- 很郁闷的错!大家帮忙看看吧!
- 自学如何练习做项目啊?
- smartupload奇怪的乱码问题---在线等!!
- 关于weblogic的问题!
- 应该有高手用过 ImageJ吧!!!!!!!(UP有分喽!)
- j2ee,ssh,oracle...二十余个java内部项目视频共享
- 谁能给一个用java编写的简单的词法分析器,语法分析器。能对C语言或c++程序分析。
while(变量true){...}
守护线程发现某线程超时了就更改他的变量为false,让子线程停止。
说散分的时候都出来冒泡了....java不允许其他线程阻断当前线程
这样会存在不安全的地方比如你走路走的好好的
别人在那突然跑过来把你打倒.....
你身上的钱财就下落不明了肯定....
所以java已经禁止使用了
另外cancel()方法仅仅针对当前线程另外,比如我需要执行长时间的方法之后还有其他的操作
那么我就不能阻止我当前的方法了
信号量的使用也不能够在我原有的代码基础上进行了
例如一段代码执行的时间太长了
我不可能让这段代码从什么地方中断的
这是狭义的,并不能说明广义上的线程工作无法取消或停止以下这些貌似都可以java.util.concurrent.Future.cancel(boolean)
java.util.concurrent.FutureTask.cancel(boolean)
java.util.Timer.cancel()
java.util.TimerTask.cancel()
比如光驱去读一张非常烂的盘,读半天读不出来,但是你想结束,但是结束不了。因为很难马上结束IO操作。
这个我试过, 在线程里写一个 while(true) 绝对cancel()不了
既然Future,TimerTask等线程工作模块提供了cancel方法,它们总会有合适的工作环境来cancel的(否则cancel方法有何意义呢?),未必在while(true)下。
wait sleep 可以中断的可以cancel, 其他则不可控的,这个Runnable去操作数据库查询了,而且这个查询时间很长, 或者加一个while(true) 之类的。
java.util.concurrent.FutureTask.cancel(boolean)
java.util.Timer.cancel()
java.util.TimerTask.cancel()
Timer,TimerTask的cancel方法也是只中断自己的
线程类都是这样设计的吧
前两个不怎么用到过,不是很清楚
同学,你跑题了
首先你在一个线程A中执行另外的线程B的cancel的时候,这个线程必须要是你在线程A中启动的才有效果的
这一点,我想大家都应该知道的另外
如果我有给定的方法要求控制其超时功能
目前我的知识范围内是无解的
在我系统或者应用程序已经写成的情况下,用其他的线程只能起到监控的作用,而无法做到"从中作梗"的目的了
你想说的是 在线程A的run方法中无法访问到线程B的实例?