有办法给一个方法设置超时时间不

问题描述

方法F(),当我想让F最多执行一分钟,如果一分钟还没结束就继续往下走,运行后面的代码实际情况中F很快就可以结束,现在有的时候会出异常,导致F很久都执行不完,导致后面的流程延迟太大的

解决方案

解决方案二:
另启一个线程,执行F(),结束之后,notify原来的线程,同时再判断一下执行时间,如果超时的话就不要再做下去了。原来的线程wait(60000L)
解决方案三:
这要看F方法的代码自己是否能够控制,如果不能控制的话,则只能采用一楼的这种办法。如果F方法的代码自己可以控制的话,则可以另起一个线程,循环判断,如果时间一分钟到了,而F还没有执行完成的话,通知F不要执行了,继续执行后面的代码。
解决方案四:
1楼的方法可实现,也可用CountDownLatch,一样的。另外若工作线程会占用大量资源或者可能死循环,可用Thread.interrupt方法中断它
解决方案五:
实际情况中F很快就可以结束,现在有的时候会出异常。。。。。还是研究下为什么会变慢的好,看看那几行代码有问题,能不能避免根据情况可以在主线程启动一个新线程运行F()。或F()里面开一个新线程来运行耗时的操作。第二种方法更好,不过要知道F()的到底是如何实现的。随便举一个例子:有错误请指正importjava.util.logging.Level;importjava.util.logging.Logger;classMainThread{publicvoidgood(){//启动一个线程执行F()方法Workerw=newWorker("运行F()",this);w.start();//等等10秒synchronized(this){try{wait(10000);}catch(InterruptedExceptionex){Logger.getLogger(MainThread.class.getName()).log(Level.SEVERE,null,ex);}w.shutdown();}}publicvoidF()throwsInterruptedException{System.out.println("玩游戏");//做一些事情//如果会InterruptedException异常//Thread.sleep(1000000);}privateclassWorkerextendsThread{privatefinalMainThreadmt;publicWorker(Stringname,MainThreadmt){super("线程名字是"+name);this.mt=mt;}publicfinalvoidshutdown(){interrupt();}@Overridepublicfinalvoidrun(){try{mt.F();}catch(InterruptedExceptionex){//Logger.getLogger(Worker.class.getName()).log(Level.SEVERE,null,ex);}finally{//唤醒主线程。synchronized(mt){mt.notify();}}}}publicstaticvoidmain(String[]args){MainThreadmt=newMainThread();mt.good();}}

解决方案六:
这样也并不一定在一分钟内结束,如果非得一分钟内结束,调用Thread.stop(),但这个不安全
解决方案七:
用线程,休眠啊,sleep
解决方案八:
用休眠不能彻底解决问题,这样的话虽然暂时的休眠了线程,但实质上这个线程并没有结束.
解决方案九:
那就找到很久执行不完的问题所在啊,别人都是把复杂问题简单化,lz你打算把简单问题复杂化。java里最容易导致莫名其妙异常的就是多线程了,稳定性最难判断的也是多线程。
解决方案十:
用newDate获取当前系统时间判断不可以吗?

时间: 2024-10-21 23:21:10

有办法给一个方法设置超时时间不的相关文章

PHP请求远程地址设置超时时间的解决方法_php技巧

php请求远程地址设置超时时间,主要讲解file_get_contents.fopen.curl这三个简单常用函数设置超时时间的方法,一般情况下建议使用curl,性能最好,效率也最高. 1.file_get_contents 请求超时设置 $timeout = array( 'http'=> array( 'timeout'=>5//设置一个超时时间,单位为秒 ) ); $ctx = stream_context_create($timeout); $text = file_get_conte

C++设置超时时间的简单实现方法_C 语言

本文实例讲述了C++设置超时时间的简单实现方法,代码简单易懂,功能实用.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: BOOL SetTimeOut(SOCKET s, int nTime, BOOL bRecv)  {      int ret = ::setsockopt(s, SOL_SOCKET, bRecv?SO_RCVTIMEO:SO_SNDTIMEO, (char*)nTime, sizeof(nTime));      return ret!=SOCKET_ER

web service-求助:spring webservicetemplate访问webservice怎么设置超时时间?

问题描述 求助:spring webservicetemplate访问webservice怎么设置超时时间? 客户端使用webservicetemplate访问,调用marshalSendAndReceive(String uri, Object requestPayload, WebServiceMessageCallbak requestCallback)方法,怎么样设置超时时间? 解决方案 CXF-WebService设置超时时间 解决方案二: 使用CommonsHttpMessageSe

android-安卓socket设置超时时间不管用是为何?

问题描述 安卓socket设置超时时间不管用是为何? 解决方案 Socket 设置连接超时时间Socket 关于设置Socket连接超时时间Socket 关于设置Socket连接超时时间 解决方案二: synchronized void setSoTimeout(int timeout) Sets this socket's read timeout in milliseconds. 200是 0.2秒 这个方法是这是读取超时 解决方案三: timeout的时间单位是毫秒

C# UdpClient 设置超时时间

/********************************************************************** * C# UdpClient 设置超时时间 * 说明: * 网络通信中设置超时时间是常有的时,记录UDP获取.发送超时设置方法. * * 2016-12-8 深圳 南山平山村 曾剑锋 *********************************************************************/ 一.参考文档: 1. Can

httpclient-关于HttpClient设置超时时间无效的问题

问题描述 关于HttpClient设置超时时间无效的问题 超时时间设置60S 超时时间设置5S 可以看到,当把超时时间设置为60S时,依然在21S左右超时,只有当超时时间在21S以下时,才生效.这是什么原因? public class Send_Class { public static int MAX_CONNECTION_PERROUTE = 1;//最大连接数 public static int SOCKET_TIMEOUT = 60000;//超时时间 public static voi

server-netty 未到心跳设置超时时间自动清除通道

问题描述 netty 未到心跳设置超时时间自动清除通道 项目中使用netty,设置了读写和心跳的超时时间为10分钟.但是我关闭某个客户端后, 经常未满10分钟就关闭了通道. 我自己的想法:会否是内存不足,JVM自动回收了.项目暂时架构在WIn2008 Server中, 单台的连接数暂时未1000度,JVM内存被分配了3G.希望大神帮忙分析下 解决方案 oracle设置超时时间可以设置命令执行的超时时间的脚本

调用webservice 设置超时时间

前段时间自己写了个程序,调用webservice,今天早上一执行,速度是相当的慢,一开始以为是程序的问题,后来跟踪一看,原来是调用webservice出现问题,放置webservice的服务器关掉了,导致程序访问速度慢,这样我们就要将webservice设置超时时间.如下   WebService超时设置 1. 服务器端设置超时 在 web.config 的 system.web 里添加如下配置项: < httpRuntime executionTimeout="30" />

Python中为feedparser设置超时时间避免堵塞_python

python有一个用于解析feed的模块:feedparser,feedparser解析各种feed是非常方便的,唯一比较恼火的是遇到一些badurl,经常会导致堵塞,因此需要为feedparser设置一个超时时间. 可是feedparser并没有提供这个功能,只好采用其他方法了,具体办法请参看feedparser项目的issue221. 其实也很简单,按照上面文档的说明 developers have had the ability to set a global timeout for ov