<<<<<<< .mine =======
当前位置: 首页 > SEO > java自动任务中超时的处理方法

java自动任务中超时的处理方法

时间:2011-11-17 23:11:25
随着SEOTcs的逐步开发,发现有些自动任务在获取特定值的时候特别耗时间,有时一个整体批量的任务会被某些耗时的程序卡在那里了,导致整个自动脚本任务的悬挂,影响了一些页面上的某些参数的显示。

自动任务脚本中,大部分参数是需要通过建立网络连接来执行的,往往受到的因素会很多,网速原因,页面原因,程序原因等,都有可能导致程序结果有去无回,因此使得程序悬挂,导致整体任务受影响,这个是绝对不允许的,客观上来说,客户看到一些数据没加载到,会觉得这个软件不好用,就会离开,导致web软件平台用户使用的流失率增加。

因此,有必要对单个程序单元设置一个超时的限制,如果单个程序在执行过程中超过指定的时间,则视为未获取到,从而保证整个程序执行的连贯性,保证大部分数据是完整和有效的。原来以为使用java中的Timer类,其实不然,那个是对于定时做某个任务有帮助,后来在网上找了一下,发现了一个比较好的解决办法,可以很好的解决好设置程序执行超时的问题。在java中,jdk1.5自带的并发库中Future类就能满足这样的一个需求。Future类中重要方法包括get()和cancel()。其中,get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据, cancel()则是取消数据的加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞,采用这个方法一般就会解决不少问题。

例如,我们在程序中有一个比较耗时的程序,名字叫getAlexaRank,则通过限时来获取结果的一个程序就可以写成:

public static final String getTimerAlexa(final String domain){
String obj ="-1";
ExecutorService exec = Executors.newFixedThreadPool(1);
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
return getAlexaRank(domain);
}
};
try {
Future<String> future = exec.submit(call);
obj = future.get(1000*10, TimeUnit.MILLISECONDS);
log.info(domain+" Alexa Rank Task with success:" + obj);
} catch (TimeoutException ex) {
log.info("Alexa Rank Time out with url : "+domain);
} catch (Exception e) {
log.info(domain+" Alexa Rank Failure with Exception");
}
exec.shutdown();
return obj;
}

如果getAlexaRank这个方法执行超过了10秒,则程序自动返回一个值,及时退出程序,避免了程序长时间的被拖住,影响程序效率甚至其它重要功能程序的执行。

相关文章

分享平日导致网站被降权的四大常见问题

自从百度推出权重这项产品的时候,百度对有问题的网站进行了一次重新排名调整,凡是不符合搜索引擎规则的网站都受到了不同程序的...

SEO与谷歌管理员工具

现在市面上免费得SEO工具很多,各式工具层出不穷,如果是检测网站排名,搜索引擎参数等管理类的工具,我们的SEOTcs一站...

SEO如何选择适合的关键词

好的开始是成功的一半,对SEO来说,选对关键词也决定了搜索引擎营销的成败,选太难排不上去,浪费时间和精力,选太简单排名上...

文军SEO让你挑选SEO公司有秘诀!

很多客户在选择SEO公司时,容易看花眼。因为价格有高有低落差很大,而服务承诺,都是拍胸脯保证稳定排名,怎么挑呢?逻辑判断...

SEO预警的设置

上一篇博客中我介绍了SEO参数可以预判出网站在搜索引擎权重的变化,提前根据SEO参数对网站加以预防,可以让SEO工作做的...
沪ICP备10034044号-12
400-685-0732
400-685-0732 在线咨询