㈠ android java怎么设置超时时间
第一,ConnectionPoolTimeout:
定义了从ConnectionManager管理的连接池中取出连接的超时时间。
出错会抛出
第二,ConnectionTimeout:
定义了通过网络与服务器建立连接的超时时间,Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间。档枯卖
当连接行逗HTTP服务器或者等待HttpConnectionManager管理的一个有效连接超败亮时出错会抛出ConnectionTimeoutException
第三,SocketTimeout:
这定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间。
当读取或者接收Socket超时会抛出SocketTimeoutException
㈡ java的timer类如何判断程序超时呢
参照如下的:
Timer类是用来执行任务的类,它接受一个TimerTask做参数
TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现publicvoid run()方法。这也就是我们需要执行的具体任务。
Timer有两种执行任务的模式,最常用的是schele,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(intdelay).这两种方式都可以指定任务执行的频率
我们指定一个线程A,调用对象B.wait(timeout),线程A就会阻塞,直到timeout到了,B醒来会使A继续执行。
其实Timer类是为多任务定时设计的,在实现里面,B是一个任务队列(实现上就是一个array),维护着所有使用当前Timer定时的任务,它们可是一堆货真价实的线程实例。每次线程A都取队列中距离当前时间最近的的定时任务,跟当前时间比较,然后wait(timeout)这段时间。线程唤醒的时刻也是队列中这个定时任务运行的时刻。然后线程继续取下一个定时任务,继续wait(timeout)。从这里我们能看出来,每次定时都有额外的时间开销,比如要维护队列等,所以Java的Timer类不保证实时。
Timer中最主要由三个部分组成:
任务TimerTask 、 任务队列: TaskQueue queue 和 任务调试者:TimerThreadthread
Timer对任务的调度是基于绝对时间的。
所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行。
任何一个TimerTask的执行异常都会导致Timer终止所有任务。
由于基于绝对时间并且是单线程执行,因此在多个任务调度时,长时间执行的任务被执行后有可能导致短时间任务快速在短时间内被执行多次或者干脆丢弃多个任务。
由于Timer/TimerTask有这些特点(缺陷),因此这就导致了需要一个更加完善的任务调度框架来解决这些问题。
默认情况下,只要一个程序的timer线程在运行,那么这个程序就会保持运行。当然,你可以通过以下四种方法终止一个timer线程:
调用timer的cancle方法。你可以从程序的任何地方调用此方法,甚至在一个timertask的run方法里。
让timer线程成为一个daemon线程(可以在创建timer时使用newTimer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。
调用System.exit方法,使整个程序(所有线程)终止。
㈢ java 线程池中正在运行的线程 如何设置超时时间 ps:如何设置一个线程最长的运行时间。
你可以设置一个计时器,然后把线程对象给它,让计时器在恰当时候把线程对象终止
㈣ 关于Java线程超时退出的问题.
你在捕捉到复的异常中,调用一下线制程的interrupt()方法就可以对线程进行中断,当然,你的线程中的run方法中不能catch了interrupt()异常并且忽视这个异常。
比如在出现异常的地方:
threadA.interrupt();
而threadA的run方法中:
public void run() {
while(true) {
try {
....
} catch (InterruptedException) {
break; //这样是可以的,如果没有break或者修改为continue则不行
}
}
}
也可以将这个放在while循环之外。
public void run() {
try {
while(true) {
....
}
} catch (InterruptedException) {
....
}
}
㈤ java线程 如何监控用户操作超时
给一个我自己的丝路:
用户开始操作时,session记录状态。并开启定时器,延迟时间就是你允许用户操作歼敏的时间。定悉改郑时器执行的代码,就是用户超时后,你要做的事情。
用户在时间范围睁颂内操作完成,肯定会给服务器发送完成信息,此时移除定时器即可。
㈥ java使用线程操作,等待线程后续时间过长报超时异常,如何操作使线程推出数据后即算线程操作结束
java中使用来用线程控制Task任务,自启动下面的线程就可以了,new Thread(new Task()).start() ;public class
Task implements Runnable {//新建一个任务
private TextArea textArea;
public Task(TextArea textArea){
this.textArea = textArea;
}
public void run() {
while (true) {
this.textArea.setText("这里设置: 输出的一段文字");
try {
Thread.sleep(500); // 这里设置:隔多长时间
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
㈦ java线程池里的线程,怎么设置Timeout
应该是复没有这个功制能的,因为线程池里面的线程实际上是复用的,即执行完一个Job以后会从Quenue(任务队列)里面取新的JOB。
如果有这样的需求可以:
1)控制JOB的执行时间不能太长,否则可能会造成阻塞;
2)在JOB的实现(run方法)里面做相应的控制;
3)如果JOB有长时间和短时间两种模式,可以考虑放在两个线程池中,避免长时间的任务阻塞短时间的任务;
4)也可以控制等待队列的任务个数,但是Executors默认的Factory方法是没有这个参数的,需要直接new ThreadPoolExecutor
㈧ Java线程超时管理
如果你是要来在子线程超时自后直接关闭的话可以这样:
exec=Executors.newFixedThreadPool(1);
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
//开始操作
//TimeTaskTest.star(null);
return "线程执行完成";
}
};
Future<String> future = exec.submit(call);
//设置为30分钟超时
future.get(1000*60*time , TimeUnit.MILLISECONDS);
=========================================
如果你是在进行其他操作的话那就比较麻烦了,目前我想到的是在子线程中一直访问某个变量,超时时守护线程改变这个值,然后子线程读到后退出,不过这个有个问题,就是当子线程卡死在某个环节时完全无用
㈨ java接口怎么设置timeout
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。
Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。
Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程序执行超时的关键。
㈩ java 多线程如何让程序运行一定时间后停止
你说的应该不是sleep吧。呵呵,
这么简单的话,春隐就没必要在这里问了。
我猜测呢,你是要在多线程计时任务
Task线程里面有个while循环?
那么你需要一个TimerTask 来控制这个线程,也就是计时线程。
那么这个计时线程,有两种方法~
第一种,比较不讲究的方法,也就是,对结果处理不好的方式,类似丛携于过时方法的stop,就是把你的Task线程在TimerTask里面启动。
TimerTask里面类似于
while(true){
Task.start();
Date date = new Date();
while(true){
计算时间差,如果时间差大于超时时间,则break
}
}
而在Task线程中,需要加上一行代码
this.setDeamon(true);
将这个task任务设置成后台线程。
因为是TimerTask启动的这个后台任务线程, 一旦超时,那么,这个后台线程Task将会被强制shutdown 。
这种方式适用于不怎么严格的线程要求。
还有一种呢,就是比较严格,对后台处理要求很高的那种。
就是两个线程中需要有共享的变量,将结果,运行状态,都要共享,当TimerTask发现超时的时候,会判断Task线程的处理结果。以及运行状态,而做出相应的处理。
你问的问题比较宽泛。渗森伏所以,我只能大致的把思路给介绍一下。
如果,能牵扯到实际的问题,那样就容易判断用那种方式的线程超时机制比较好了。呵呵
最后,节日愉快~~