当前位置: 代码迷 >> J2SE >> 超时多线程处理解决方法
  详细解决方案

超时多线程处理解决方法

热度:243   发布时间:2016-04-23 20:13:58.0
超时多线程处理
import java.util.concurrent.Callable;  
import java.util.concurrent.ExecutionException;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
import java.util.concurrent.Future;  
import java.util.concurrent.TimeUnit;  
import java.util.concurrent.TimeoutException;  
  
public class TimeOut {  
    public static void main(String[] args){  
        int timeout = 2; //秒.  
        ExecutorService executor = Executors.newSingleThreadExecutor();  
        Boolean result = false;     
        Future<Boolean> future = executor.submit(new MyJob("请求参数"));// 将任务提交到线程池中     
        try {     
            result = future.get(timeout*1000, TimeUnit.MILLISECONDS);// 设定在200毫秒的时间内完成   
            System.out.println(result);  
        } catch (InterruptedException e) {  
            System.out.println("线程中断出错。");  
            future.cancel(true);// 中断执行此任务的线程     
        } catch (ExecutionException e) {     
            System.out.println("线程服务出错。");  
            future.cancel(true);// 中断执行此任务的线程     
        } catch (TimeoutException e) {// 超时异常     
            System.out.println("超时。");     
            future.cancel(true);// 中断执行此任务的线程     
        }finally{  
            System.out.println("线程服务关闭。");  
            executor.shutdown();  
        }  
    }  
      
    static class MyJob implements Callable<Boolean> {    
        private String t;  
        public MyJob(String temp){  
            this.t= temp;  
        }  
        public Boolean call() {     
            for(int i=0;i<999999999;i++){  
                if(i==999999997){  
                    System.out.println(t);  
                }  
                if (Thread.interrupted()){ //很重要  
                    return false;     
                }  
            }   
            System.out.println("继续执行..........");     
            return true;     
        }     
    }   
}



不知道有没有在多线程中试过,我用Future试多线程,就会出很多问题,比如:设置的超时时间是所有任务要执行的时间,不是每个线程的超时时间!求解答~,怎么样处理 才可以引入多线程来处理
------解决思路----------------------
给你个思路:用timer设置总时间,到时间后检查是否有未处理完的线程,有的话发消息终止线程。
  相关解决方案