工作中经常会遇到如下问题:

  1. 程序中某方法挺耗时,但想超过XX数值则按失败算;

  2. 程序中需要调用外部接口,要考虑外部接口不可用,或卡死问题。

针对以上问题,我们都想在程序中给某方法添加超时判断;运行程序等待该方法多长时间,超过则另作处理。

下面是写的一段代码,大致可以实现该功能:

public static void main(String[] args){
	Thread t = null;
	try{
		FutureTask<Boolean> task = new FutureTask<Boolean>(new Callable<Boolean>() {
			public Boolean call() throws Exception {
				Thread.sleep(10*100);//处理方法
				return true;  //返回处理结果
			}
		});
		t = new Thread(task);
		t.start();
		boolean bl = task.get(10*10, TimeUnit.MILLISECONDS); //允许阻塞等待方法处理1秒,超出则抛异常
		
		System.out.println(bl);
		System.out.println(t.getState());
		
	}catch(Exception e1){
		e1.printStackTrace();
		System.out.println(t.getState());
		t.interrupt(); //在超时情况下上面新生成的线程不会关闭直到方法处理完毕,需要中断
	}
	
	try{
		for(int j=0;j<13;j++){
			Thread.sleep(10*10);
			System.out.println(j+ "" + t.getState());
		}
		
	}catch(Exception e2){
		e2.printStackTrace();
	}

}