由于一些特殊需要,对执行流加上超时控制.以自己的水平想了下面的方法.也许有更好的通用方法,只是我不知道.呵,写出来,供有需要的人参考.
TimeoutThread.java

public
class
TimeoutThread
...
{
long milliseconds;

private void notifyObj()...{

synchronized(this)...{
notify();
}
}

public TimeoutThread(long milliseconds)...{
this.milliseconds = milliseconds;
}

public void mydo()...{
}
Thread runthread = null;

private void myrun()...{

class MyThread extends Thread...{

public void run()...{

try...{
//监控程序执行时间不得超过
Thread.sleep(milliseconds);

}catch(Exception exp)...{
//exp.printStackTrace();
}
//如果程序超出时间,停止原线程
runthread.interrupt();
//防止InterruptedException被捕获而杀不了,尝试20次
int i=0;

while(runthread.isAlive())...{

try...{
Thread.sleep(50);

}catch(Exception exp)...{}
runthread.interrupt();
i++;

if(i>20)...{
break;
}
System.out.println(i);
}
notifyObj();
}
}
//将被监视线程指定为当前线程
runthread = Thread.currentThread();
//创建监控线程,设为非阻塞线程
MyThread timeOutThread = new MyThread();
timeOutThread.setDaemon(true);
timeOutThread.start();
mydo();
timeOutThread.interrupt();
}

public void run()...{

try...{

new Thread()...{

public void run()...{

try...{
myrun();
notifyObj();

}catch(Exception exp)...{
notifyObj();
exp.printStackTrace();
}
}
}.start();

synchronized(this)...{
wait();
}

}catch(Exception ex)...{
ex.printStackTrace();
}
}
}
TT.java

public
class
TT
...
{


public static String getName(long ms)...{
final StringBuffer sb = new StringBuffer();

new TimeoutThread(ms)...{

public void mydo()...{

try...{
Thread.sleep(2000);
sb.append("hello world");

}catch(Exception exp)...{
}
}
}.run();
return sb.toString();
}

/** *//**
* @param args
*/

public static void main(String[] args) ...{
// TODO Auto-generated method stub
System.out.println("begin 5000 method");

new TimeoutThread(5000)...{

public void mydo()...{
//该函数不能将InterruptedException捕获而不抛出,否则,无法起到监控效果
//java.lang.InterruptedException
//此函数显示了不能正确被关闭

for(int i=0;i<20;i++)...{

try...{
Thread.sleep(1000);

}catch(Exception exp)...{
//exp.printStackTrace();
}
System.out.println("step:"+i);
}
System.out.println("eeeee:");
}
}.run();
System.out.println("end method");
System.out.println("begin 5000 method");

new TimeoutThread(5000)...{

public void mydo()...{
//该函数不能将InterruptedException捕获,否则,无法起到监控效果
//java.lang.InterruptedException

try...{

for(int i=0;i<10;i++)...{
Thread.sleep(1000);
System.out.println("step:"+i);
}

}catch(Exception exp)...{
//exp.printStackTrace();
}
}
}.run();
System.out.println("end method");
System.out.println("get name is:"+getName(1000));
System.out.println("get name is:"+getName(5000));
}

}