首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2013-03-19 
我们爱分享活动--猎狗模式前段时间在也博客里看的一篇博文是说掉用远程的webservice超时使得系统崩掉。并给

我们爱分享活动--猎狗模式
前段时间在也博客里看的一篇博文是说掉用远程的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有异步的。

热点排行