日期:2014-05-20  浏览次数:20621 次

调用一个方法,如果其在一定时间内没返回,如何赋一个默认值?
String   result   =   " ";
resut   =   getResult( "1 ");//如果getResult一分钟后没结果返回(可能没执行完)
就给result赋值 "0 ";

------解决方案--------------------
没执行完就返回,就算实现了能保证不出错?比如打开io最终没有关闭,打开数据库链接最终没有关闭连接
------解决方案--------------------
这就要看这个getResult函数是怎么处理的了。如果超时就返回一个特定的值,检查这个值就可以了;如果超时抛出异常,那么可以在捕捉异常后给定默认值;如果超时了什么也没有……那就没办法了。
------解决方案--------------------
没有简单的方法

除非你做一个线程监视生成的连接,如果监视线程sleep的时间到了查询线程还没有把结果送回你的监视线程,那么就把值送回(没有被查询线程刷新的)
------解决方案--------------------
就是,就算实现了一分钟后没结果返回,给result赋值为0,(如果没有办法马上结束对result处理的函数)但是恰巧赋值后,result的值又被在函数中设置了值,这时已经超过了一分钟的条件,要进行相应的处理,但此时result的值已经不是0,这好像有些矛盾了。
------解决方案--------------------
http://blog.csdn.net/CrazyGou/archive/2007/06/12/1648475.aspx
------解决方案--------------------
用Callable接口

FutureTask ft=new FutureTask (Callable <V> callable);
Thread.sleep(60000);
int returnInt;
if(ft.isDone()){
returnInt=ft.get();
}else{
returnInt=0;
}

------解决方案--------------------
回复人:huojicq() ( 一级(初级)) 信誉:100 2007-06-12 10:26:54 得分:0
?
用Callable接口

FutureTask ft=new FutureTask (Callable <V> callable);
Thread.sleep(60000);
int returnInt;
if(ft.isDone()){
returnInt=ft.get();
}else{
returnInt=0;
}
-------------------------------------
你这样写是错的,至少加上这句:new Thread(ft).start();
并且,如果函数在60000ms内返回了呢?!