有時候咱們須要展現一些內容,若是等全部內容都加載完畢再展現這樣反而會下降用戶體驗;
由於若是消耗時間長那麼用戶須要瞪着空白的頁面,反而會失去興趣;
因此咱們但願加載一點資源顯示一點,對於那麼超過咱們容忍範圍還未加載完畢的資源咱們應該
再也不去加載,放棄本次加載或者顯示一些默認結果dom模擬:ide
final Random r = new Random(); // 建立一個固定大小的線程池 ExecutorService es = Executors.newFixedThreadPool(10); // 將全部處理結果提交到一個固定大小的隊列(可不指定,默認建立一個無界隊列) ExecutorCompletionService<String> ecs = new ExecutorCompletionService<String>( es,new LinkedBlockingQueue<Future<String>>(1000)); for (int i = 0; i < 10; i++) { //提交全部任務 ecs.submit(new Callable<String>() { @Override public String call() throws Exception { //模擬一個耗時操做 long l = r.nextInt(4000); Thread.sleep(l); return Thread.currentThread().getName() + "|" + l; } }); try { //得到返回結果,3s超時(表示咱們可以容忍的最大等待時間) System.out.println(ecs.take().get(3, TimeUnit.SECONDS)); } catch (InterruptedException e) { // 線程被中斷 } catch (ExecutionException e) { // e.printStackTrace(); } catch (TimeoutException e) { // 超時,放棄這個結果 } } es.shutdown();pool-1-thread-1|884 pool-1-thread-2|3469 pool-1-thread-3|1001 pool-1-thread-4|927 pool-1-thread-5|3503 pool-1-thread-6|712 pool-1-thread-7|2015 pool-1-thread-8|2430 pool-1-thread-9|1613 pool-1-thread-10|2583