我们爱分享活动--猎狗模式
前段时间在也博客里看的一篇博文是说掉用远程的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;
}
}
学习
[解决办法]
慕名而来
[解决办法]
学习心态。。。。看糊涂了。。。。。
[解决办法]
我在考虑有没有必要
[解决办法]
收录了。
[解决办法]
该回复于2012-01-30 13:06:14被版主删除
[解决办法]
猎狗模式~~~ 学习了!
[解决办法]
不错!
[解决办法]
mark
学习。
[解决办法]
我
oooO ↘┏━┓ ↙ Oooo
( 踩)→┃你┃ ←(死 )
\ ( →┃√┃ ← ) /
\_)↗┗━┛ ↖(_/
[解决办法]
学习了
[解决办法]
猎狗模式
学习
[解决办法]
猎狗模式,猎分来了!!!
[解决办法]
好好学习,天天向上
[解决办法]
学习了
[解决办法]
猎狗模式,没听过,希望LZ多多共享这方面的资料,先谢谢了。 学习
[解决办法]
这个真的不懂。
[解决办法]
这个真的不懂。
[解决办法]
这个也不懂...
[解决办法]
我来灌一下水~~~~~~~~~~~~
[解决办法]
学习一下~~
[解决办法]
这个真的不懂。
[解决办法]
学习,学习
[解决办法]
该回复于2012-08-28 09:11:04被版主删除
------解决方案--------------------
为什么都用静态的呀
[解决办法]
不懂 谢谢分享
[解决办法]
學習~
[解决办法]
mark
[解决办法]
拿分闪人。。。。。。
[解决办法]
mark
[解决办法]
[解决办法]
[解决办法]
仔细看看...
[解决办法]
每天回帖即可获得10分可用分!
[解决办法]
不知道啊,行不行啊。。
[解决办法]
木有用,坑爹
[解决办法]
学习收藏
[解决办法]
还没懂
[解决办法]
1 鼓励
2 建议不要直接开那么多线程,至少线程有个上限
3 建议public static <T> T call(Callable<? extends T> task
[解决办法]
还没懂
[解决办法]
猎狗模式? 貌似不常用啊!
[解决办法]
还没懂
[解决办法]
学习学习。
[解决办法]
猎狗很形象,能不能用C来写呢
[解决办法]
完全没用。
鉴定完毕。
[解决办法]
搞的跟高中物理竞赛题一样。。。
[解决办法]
值得收藏和学习啊
[解决办法]
华丽的接分再看。。
[解决办法]
不错 在ITEYE上看见过相似的文章
[解决办法]
ws有异步的。