原理:增加一个线程类用于监控目标类即可,代码如下:
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();
}