在管道流的接收方用PipedInputStream.read(byte[] )是一个阻塞式的读取,而这个读取一般是放在一个线程中的,这时我们就需要给这个读取过程设置一个时间限制,如果时间到了就结束线程。
这是一个线程管理类,作用是管理一些有阻塞的线程的结束。
方法说明:建立一个Timer对象作为定时器,然后这个类是TimerTask的子类,所以就必须实现run方法(类似线程)。然后再设一个标志bStop,用于表示是否run方法结束时关掉Timer(Timer这个类一旦初始化必须调用Timer.cancel()方法才能结束程序,否则程序一直运行)
class ThreadManagement extends TimerTask {
private Thread t = null;
private Timer timer = null;
private boolean bStop = false;
public ThreadManagement(Thread t) {
this.t = t;
timer = new Timer();
bStop = true;
}
public void stop(long millis, boolean bStop) {
this.bStop = bStop;
this.stop(millis);
}
public void stop(long millis, Thread t) {
this.t = t;
this.stop(millis);
}
public void stop(long millis) {
timer.schedule(this, millis);
}
@Override
public void run() {
// TODO Auto-generated method stub
if(t.isAlive()) {
System.out.println("thread alive");
t.interrupt();
} else {
System.out.println("thread not alive");
}
if(bStop) {
timer.cancel();
}
}
}