原理:增加一个线程类用于监控目标类即可,代码如下:
package aa;
import java.util.Vector;
public class SomeoneThread extends Thread implements ISomeoneThread{
/**
* @param args
*/
public static void main(String[] args) {
SomeoneThread thread = new SomeoneThread();
thread.start();
TimeoutManager manager = new TimeoutManager();
manager.vector.add(thread);
manager.start();
}
@Override
public void run() {
super.run();
startTime = System.currentTimeMillis();
int i = 0;
while(isRunning()){
System.out.println("vlaue:" + i++ );
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 运行标识
private boolean running = true;
// 目标类的启动时间
private long startTime;
public boolean timeout() {
long currentTime = System.currentTimeMillis();
// 表示当运行超时,例如10s
if ( (currentTime - startTime) < 10000 ){
return false;
}
return true;
}
public synchronized boolean isRunning() {
return running;
}
public synchronized void setRunning(boolean running) {
this.running = running;
}
}
class TimeoutManager extends Thread {
public Vector vector = new Vector();
public boolean running = true;
@Override
public void run() {
super.run();
while(running){
for ( int i = 0; i< vector.size();i++){
Object obj = vector.get(i);
if ( obj instanceof ISomeoneThread){
if ( ((ISomeoneThread)obj).timeout()){
((SomeoneThread)obj).setRunning(false);
System.out.println("timeout");
running = false;
}
}
}
}
}
}
interface ISomeoneThread {
public boolean timeout();
}
本文介绍了一种通过创建自定义线程类来监控其他线程运行状态的方法,并实现了一个简单的超时管理机制。该机制能定期检查被监控线程是否超出预定的时间限制,并在超时时采取相应措施。
496

被折叠的 条评论
为什么被折叠?



