如何在线程运行5秒后停止运行?
我无法使用java 5+线程功能(必须在j2me中工作)。
可能的解决方案 -
安排两个主题。一个执行实际工作(T1),另一个执行T1(T2)的监视。
一旦T1开始,然后开始T2。 T2每秒在T1上调用isalive()方法,如果在10秒后T2没有死亡,则T2在T1上调用中止,这会终止T1线程。
这可行吗?
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
getPostData();
}
};
timer.schedule(timerTask, 0);
public void abortNow() {
try {
_httpConnection.close();
}
catch(Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:1)
您的问题没有唯一的答案。这取决于线程的作用。首先,你打算如何阻止该线程?
BlockingQueue
获取它们,那么你可以用一个所谓的“毒丸”,就像一个模拟任务,线程上写着:“嘿,我必须关闭”。read()
上阻塞,则只能关闭套接字以解锁它。请注意interrupt()
并不意味着在正常情况下停止Thread
,如果你interrupt()
一个帖子,在大多数情况下它只会继续做它的东西。在99.9%的情况下,使用interrupt()
停止线程只是糟糕的设计。
无论如何,要在5秒后停止它,只需设置一个Timer
即可。或者更好join
,超时为5秒,然后停止它。问题是如何阻止它。所以请告诉我你怎么认为应该停止这个主题,以便我能更好地帮助你。
告诉我线程的作用。
编辑:回复你的评论,只是一个例子
class MyHTTPTransaction extends Thread {
public MyHTTPTransaction(.....) {
/* ... */
}
public void run() {
/* do the stuff with the connection */
}
public void abortNow() {
/* roughly close the connection ignoring exceptions */
}
}
然后
MyHTTPTransaction thread = new MyHTTPTransaction(.....);
thread.start();
thread.join(5000);
/* check if the thread has completed or is still hanging. If it's hanging: */
thread.abortNow();
/* else tell the user everything went fine */
:)
您还可以在Timer
设置Condition
,或使用Lock
,因为我打赌可能存在竞争条件。
干杯。