前不久在项目实施中遇到这样的问题:在主系统A中需要调用外部系统B中的一段程序,但由于外部系统B极不稳定,导致主系统A为了等待外部系统B的响应需要很长时间,严重影响了主系统的正常运行。为了限制等待外部系统响应的时间,规定等待超过10秒定义为超时,所以就写了这样一段程序,如下:
主进程:
public class MainThread extends Thread {
public void run() {
try {
while(true)
{
System.out.println("[INFO]Main thread is running!");
sleep(100000);
}
}
catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("[WARN]Main thread is interupt!");
}
function();
}
public void function() {
System.out.println("[INFO]Function is in Action!");
}
public static void main(String[] args)
{
MainThread main = new MainThread();
main.start();
new TimedThread(main,10000).start();
}
}
主进程中定义执行主体,以及中断后的超时处理程序。
超时进程:
public class TimedThread extends Thread {
Thread mainThread;
long waitTime;
public TimedThread(Thread thread , long timed)
{
mainThread = thread;
waitTime = timed;
}
public void run()
{
try {
sleep(waitTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(mainThread.isAlive())
{
System.out.println("[INFO]Main thread must be interrupted in a minute!");
mainThread.interrupt();
}
}
}
超时进程中定义等待超时时间后,中断主进程。
Main中实例化主进程和超时进程并同时启动。主进程启动后,超时进程休息10秒后发现主进程仍然在运行,便中断主进程并抛出中断异常,主进程处理完中断异常后继续完成后面程序后停止。