为了账号安全,请及时绑定邮箱和手机立即绑定

可以超时java方法吗?

可以超时java方法吗?

月关宝盒 2019-04-19 18:15:30
我需要执行ping webservice来检查我是否有连接到端点,并且webservice服务器都很好。这有点蠢,但我必须为此调用一个Web服务。问题是,当我调用stub.ping(request)并且我没有连接时,它会继续尝试执行此代码一段时间......然后返回false。如果它不能ping通过1秒后任何方法使这个超时?public boolean ping() {         try {             PingServiceStub stub = new PingServiceStub(soapGWEndpoint);             ReqPing request = new ReqPing();             UserInfo userInfo = new UserInfo();             userInfo.setName(soapGWUser);             userInfo.setPassword(soapGWPassword);             ApplicationInfo applicationInfo = new ApplicationInfo();             applicationInfo.setConfigurationName(soapGWAppName);             stub.ping(request);             return true;         } catch (RemoteException | PingFault e) {             return false;         }     }
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以使用Google Guava库中的TimeLimiter之类的东西。这允许您在可以使用Timeout调用的操作中包装可调用对象。如果callable没有及时完成操作,它将抛出一个TimeoutException你可以捕获的并在一秒钟后返回false。

举个例子:

TimeLimiter timeLimiter = new SimpleTimeLimiter();try {
  String result = timeLimiter.callWithTimeout(
                () -> callToPing(), 1, TimeUnit.SECONDS);
  return true // Or something based on result} catch (TimeoutException e) {
  return false}


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信