猿问

可以超时java方法吗?

我需要执行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;
        }
    }



月关宝盒
浏览 532回答 2
2回答

慕村9548890

您可以使用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}
随时随地看视频慕课网APP

相关分类

Java
我要回答