日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
控制Java線程超時(shí)后中止的方案

這里使用JDK5+的java.util.concurrent包下的API實(shí)現(xiàn),采用這種方式是相對比較安全的。

實(shí)現(xiàn)效果:

啟動一個(gè)任務(wù),然后等待任務(wù)的計(jì)算結(jié)果同時(shí)設(shè)定一個(gè)超時(shí)時(shí)間,如果等待時(shí)間超出預(yù)設(shè)定的超時(shí)時(shí)間,則中止任務(wù)。

代碼實(shí)現(xiàn):

 
 
 
  1. import java.util.concurrent.Callable;    
  2. import java.util.concurrent.ExecutionException;    
  3. import java.util.concurrent.ExecutorService;    
  4. import java.util.concurrent.Executors;    
  5. import java.util.concurrent.Future;    
  6. import java.util.concurrent.TimeUnit;    
  7. import java.util.concurrent.TimeoutException;    
  8.     
  9. /**   
  10.  * 啟動一個(gè)任務(wù),然后等待任務(wù)的計(jì)算結(jié)果,如果等待時(shí)間超出預(yù)設(shè)定的超時(shí)時(shí)間,則中止任務(wù)。   
  11.  *    
  12.  * @author Chen Feng   
  13.  */    
  14. public class TaskTimeoutDemo {    
  15.     
  16.     public static void main(String[] args) {    
  17.         System.out.println("Start ...");    
  18.     
  19.         ExecutorService exec = Executors.newCachedThreadPool();    
  20.             
  21.         testTask(exec, 15); // 任務(wù)成功結(jié)束后等待計(jì)算結(jié)果,不需要等到15秒    
  22.         testTask(exec, 5); // 只等待5秒,任務(wù)還沒結(jié)束,所以將任務(wù)中止    
  23.     
  24.         exec.shutdown();    
  25.         System.out.println("End!");    
  26.     }    
  27.     
  28.     public static void testTask(ExecutorService exec, int timeout) {    
  29.         MyTask task = new MyTask();    
  30.         Future future = exec.submit(task);    
  31.         Boolean taskResult = null;    
  32.         String failReason = null;    
  33.         try {    
  34.             // 等待計(jì)算結(jié)果,最長等待timeout秒,timeout秒后中止任務(wù)    
  35.             taskResult = future.get(timeout, TimeUnit.SECONDS);    
  36.         } catch (InterruptedException e) {    
  37.             failReason = "主線程在等待計(jì)算結(jié)果時(shí)被中斷!";    
  38.         } catch (ExecutionException e) {    
  39.             failReason = "主線程等待計(jì)算結(jié)果,但計(jì)算拋出異常!";    
  40.         } catch (TimeoutException e) {    
  41.             failReason = "主線程等待計(jì)算結(jié)果超時(shí),因此中斷任務(wù)線程!";    
  42.             exec.shutdownNow();    
  43.         }    
  44.     
  45.         System.out.println("\ntaskResult : " + taskResult);    
  46.        System.out.println("failReason : " + failReason);    
  47.     }    
  48. }    
  49.     
  50. class MyTask implements Callable {    
  51.     
  52.     @Override    
  53.     public Boolean call() throws Exception {    
  54.         // 總計(jì)耗時(shí)約10秒    
  55.         for (int i = 0; i < 100L; i++) {    
  56.             Thread.sleep(100); // 睡眠0.1秒    
  57.             System.out.print('-');    
  58.         }    
  59.         return Boolean.TRUE;    
  60.     }    
  61. }    

運(yùn)行結(jié)果:

 
 
 
  1. Start ...    
  2. ----------------------------------------------------------------------------------------------------    
  3. taskResult : true    
  4. failReason : null    
  5. ---------------------------------------------    
  6. taskResult : null    
  7. failReason : 主線程等待計(jì)算結(jié)果超時(shí),因此中斷任務(wù)線程!    
  8. End!   

網(wǎng)站欄目:控制Java線程超時(shí)后中止的方案
鏈接URL:http://www.dlmjj.cn/article/cdjsgpg.html