我们爱分享活动--猎狗模式

望舒 2011-10-17 11:13:09
加精
前段时间在也博客里看的一篇博文是说掉用远程的webservice超时使得系统崩掉。并给出了一个设计,用于调用别人写的接口
基于著作权只保护作品思想表达方式而不保护思想本身 我自己重新重写了他给出的方法,我觉得他的思想非常值得学习。在系统设计中 任何输入都当成恶意的。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/****
* 用于进黑洞抓取东西的函数猎狗
*
* @author
*
*/
public class FuncCourser {
private FuncCourser() {
}

private static ExecutorService executor = Executors
.newCachedThreadPool(new ThreadFactory() {
int nCount = 0;

public Thread newThread(Runnable task) {
nCount++;
Thread invokeThread = new Thread(task);
invokeThread.setName("Invoker-thread-" + nCount);
invokeThread.setDaemon(true);
return invokeThread;
}
});

/****
* 目标方法无返回值使用该方法调用
*
* @param task
* 调用代码
* @param unit
* 超时时间类
* @param timeout
* 时间
* @throws TimeoutException
* 调用超过指定的时间抛出此异常
*/
public static void call(Runnable task, TimeUnit unit, long timeout)
throws TimeoutException {
Future<?> futureResult = executor.submit(task);
try {
futureResult.get(timeout, unit);
} catch (Exception e) {
if (e instanceof TimeoutException) {
throw new TimeoutException("invoke timeout!");
}
throw new RuntimeException(e);
}

}

/*****
* 目标方法有返回值时使用该方法调用
*
* @param <T>
* @param task
* 调用代码
* @param unit
* 超时时间类型
* @param timeout
* 时间
* @return 被调用函数的返回值
* @throws TimeoutException
* 调用超过指定时间时抛出此异常
*/
public static <T> T call(Callable<?> task, TimeUnit unit, long timeout)
throws TimeoutException {
Future<?> futureResult = executor.submit(task);
Object callRet = null;
try {
callRet = futureResult.get(timeout, unit);
} catch (Exception e) {
if (e instanceof TimeoutException) {
throw new TimeoutException("invoke timeout!");
}
throw new RuntimeException(e);
}
return (T) callRet;
}

}


单调用其他人接口时使用子线程这样不会因为别人的方法死锁而照成系统蹦溃,这这种方法在多线程的环境中会产生很多的子线程照成许多内存占用,但对于安全来说这点牺牲值得。
...全文
3344 100 打赏 收藏 转发到动态 举报
写回复
用AI写文章
100 条回复
切换为时间正序
请发表友善的回复…
发表回复
lys682968952012 2013-03-18
  • 打赏
  • 举报
回复
不错学习一下,猎狗模式!
Johnny__Tang 2012-10-01
  • 打赏
  • 举报
回复
没碰到过的技术,学习学习,谢谢分享
nhy338 2012-08-28
  • 打赏
  • 举报
回复
拿完分,再看
gssingleBoy 2012-07-06
  • 打赏
  • 举报
回复
看不懂。。。
a312983516 2012-04-17
  • 打赏
  • 举报
回复
我建议大家访问原文看看回复 多翻几页 有个大牛回答的非常好 在第五页 中间部分 最后作者都说非常对
地址是:http://www.iteye.com/topic/1116449

此模式根本不行
深夜情感老师 2012-03-30
  • 打赏
  • 举报
回复
好好学习下猎狗模式
renwolang521 2012-03-15
  • 打赏
  • 举报
回复
原文
http://www.iteye.com/topic/1116449
取与舍 2012-02-13
  • 打赏
  • 举报
回复
看不懂~
zjturn 2012-01-12
  • 打赏
  • 举报
回复
好像不是很懂啊 再多看看
坚如磐石_8023 2011-11-09
  • 打赏
  • 举报
回复
猎狗模式???这个还没听说过噢,研究中....
SmileToCandy 2011-10-30
  • 打赏
  • 举报
回复
不错.
xuexingyang 2011-10-28
  • 打赏
  • 举报
回复
good good study and day day up.
零度空间0520 2011-10-25
  • 打赏
  • 举报
回复
猎狗模式~~~ 学习了!```
hiyyt 2011-10-25
  • 打赏
  • 举报
回复
标记一下~学习了~!
  • 打赏
  • 举报
回复
猎狗模式?
怪人伽利略 2011-10-24
  • 打赏
  • 举报
回复
学习中。。。。
YHL27 2011-10-24
  • 打赏
  • 举报
回复
学习。。。
LixueDaddy 2011-10-23
  • 打赏
  • 举报
回复
好帖,收藏了。
ITshashou 2011-10-23
  • 打赏
  • 举报
回复
表示没看懂!!
dhy3605 2011-10-22
  • 打赏
  • 举报
回复
看看怎么样
加载更多回复(69)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧