Tag: 超时

如何在java中实现有效的超时

有n对象执行某些操作。 执行操作后,将更新时间戳。 现在我想实现一个超时线程,它validation时间戳是否早于例如60秒。 我的第一个解决方案是使用一个线程(while-loop + sleep)执行该操作,该线程包含一个包含所有对象(包括最后一个时间戳)的列表。 现在我遇到的问题是,最糟糕的情况是线程需要59秒加上睡眠时间来决定超时。 我正在寻找像Timer这样的解决方案,可以更新延迟时间。 有任何想法吗?

围绕Java操作应用超时控制

我正在使用第三方Java库与REST API进行交互。 REST API有时需要很长时间才能响应,最终导致抛出java.net.ConnectException 。 我想缩短超时时间,但无法修改第三方库。 我想在调用Java方法时应用某种forms的超时控制,以便我可以确定在什么时候放弃等待。 这与网络超时无直接关系。 我希望能够尝试执行操作,并能够在指定的等待时间后放弃。 以下内容绝不是有效的Java,但在概念上certificate了我想要实现的目标: try { Entity entity = new Entity(); entity.methodThatMakesUseOfRestApi(); } catch () { throw TimeoutException(); }

Jetty Websocket IdleTimeout

我最近一直在使用Jetty API (9.4.5 release)带注释的websockets,并与之聊天。 但是我遇到了一个问题,5分钟后(我认为是默认计时器),会话关闭(这不是由于错误)。 我发现的唯一解决方案是通知我的socket关闭事件并在新套接字中重新打开连接。 但是我已经阅读了stackOverflow,通过在WebsocketPolicy中设置IdleTimeOut ,我可以避免这个问题: 我试过设置为3600000 ,但行为根本没有改变 我也尝试将其设置为-1但我得到以下错误: IdleTimeout [-1] must be a greater than or equal to 0 private ServletContextHandler setupWebsocketContext() { ServletContextHandler websocketContext = new AmosContextHandler(ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY); WebSocketHandler socketCreator = new WebSocketHandler(){ @Override public void configure(WebSocketServletFactory factory){ factory.getPolicy().setIdleTimeout(-1); factory.getPolicy().setMaxTextMessageBufferSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxBinaryMessageBufferSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxTextMessageSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxBinaryMessageSize(MAX_MESSAGE_SIZE); factory.setCreator(new UpgradedSocketCreator()); } }; ServletHolder sh = […]

如何强制超时为DriverManager.getConnection()方法调用?

我有一个应用程序,它将与MySQL建立数据库连接并执行查询。 有时, DriverManager.getConnection()方法调用需要2秒,有时需要30秒。 有没有办法控制此方法2秒后超时? DriverManager.setLoginTimeout()似乎不起作用。 实际上,我可以通过将线程hibernate为超时值并在唤醒后关闭连接来为statement.executeQuery()设置超时。 但它的连接建立部分我无法真正设置超时。 非常感谢任何帮助。

Android java.net.SocketTimeoutException:连接超时

最近我在我的程序中遇到以下错误: 11-18 12:30:30.259: W/System.err(21368): java.net.SocketTimeoutException: Connection timed out 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 11-18 12:30:30.259: W/System.err(21368): at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 11-18 12:30:30.259: W/System.err(21368): at java.net.Socket.connect(Socket.java:1002) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:75) 11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:48) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322) 11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 11-18 […]

在ObjectInputStream.readObject()上设置超时是否安全?

我有一个ObjectInputStream通过套接字连接到ObjectOutputStream ,我一直在使用Socket.setSoTimeout()使ObjectInputStream.readObject()只阻塞100ms。 自从我开始这样做以来,我在调用readObject()时得到了很多StreamCorruptedError 。 超时可能是罪魁祸首吗?

计算有时间限制

我正在尝试编写一个允许我在给定时间窗口内运行计算的构造。 就像是: def expensiveComputation(): Double = //… some intensive math val result: Option[Double] = timeLimited( 45 ) { expensiveComputation() } 这里timeLimited将运行expensiveComputation ,超时为45分钟。 如果达到超时,则返回None ,否则将结果包装为Some 。 我正在寻找一个解决方案: 在性能和记忆方面相当便宜; 将在当前线程中运行限时任务。 有什么建议吗? 编辑 我理解我的原始问题没有解决方案。 假设我可以为计算创建一个线程(但我不想使用线程池/执行器/调度程序)。 什么是最快,最安全,最干净的方法?

如何创建一个在我的应用程序运行时一直运行的线程

编辑:我现在确定问题与while (true)循环有关,因为我已经注释了所有其他命令并且应用程序在没有附加exception的情况下进行部署。 我不确定它有多重要,但我的ServletContextListener实现如下所示: public class BidPushService implements ServletContextListener{ public void contextInitialized(ServletContextEvent sce) { //Some init code not relevant, omitted for clarity BidPushThread t= new BidPushThread(); t.setServletContext(sce.getServletContext()); t.run(); } 所以现在线程在部署应用程序时运行但由于while循环被注释它没有任何实际意义。 当我的应用程序加载时,我需要在后台运行一个线程,并且不断(没有超时)检查某个队列中的对象。 当然,一旦有了对象,它就“照顾它们”,然后继续检查队列。 目前,我正在实现ServletContextListener接口,并在应用程序加载时调用。 在其中,我做了一些维护工作并启动了一个我从java.lang.Threadinheritance的线程。 这是我的问题开始的地方(或者我认为)。 在我的run()方法中,我有一个 while (true) { //some code which doesn’t put the thread to sleep ever } 当我尝试将我的应用程序部署到服务器时,我得到一个java.util.concurrent.TimeOutException 。 我究竟做错了什么? 我不能有一个始终运行的线程吗? 删除应用程序后,该线程将由ServletContextListener的相应事件停止。 我确实需要能够毫不拖延地检查队列的东西。 […]

向DatagramSocket添加超时 – receive()

我需要在这段代码上创建一个10秒的超时 DatagramPacket getack = new DatagramPacket(incoming,incoming.length); socket.receive(getack); 我需要它列出10s的传入数据包,如果它在10s之前收到一个数据包它将跳过if语句,如果它达到10s它将跳转到else并重新发送数据包。 这是可能的,我怎么能这样做,我对此很新。 private static void sendDATA() { outgoing = new byte[512]; // Empty array try { ByteBuffer sDATA = ByteBuffer.allocate(516); // 512 – 2 byte opcode, 2 byte block #, 512 data DatagramPacket data = new DatagramPacket(outgoing, outgoing.length, InetAddress.getByName(clientip), clientport); InputStream fis = new FileInputStream(new File(FILE)); int a; […]

使用Timeout避免Javamultithreading中的死锁

避免Javamultithreading中死锁情况的策略之一是使用超时。 假设,一个线程已获得对一个资源的锁定,现在正在等待另一个资源上的锁定。 经过一段时间后,如果无法获取资源2的锁定,则应该停止等待资源2上的锁定。 它也应该释放对resource1的锁定。 因此将避免死锁。 但是如何在Java中实现它? 如何明确“释放”锁定? 如何定义等待锁的超时。 什么是精确的java命令和语法。 请问任何问候世界的例子吗?