亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java項目中的線程池異步怎么利用 ExecutorServic實現

發布時間:2020-12-01 14:56:06 來源:億速云 閱讀:275 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Java項目中的線程池異步怎么利用 ExecutorServic實現,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Java通過Executors提供四種線程池,分別為:

  • newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。

  • newFixedThreadPool 創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。

  • newScheduledThreadPool 創建一個定長線程池,支持定時及周期性任務執行。

  • newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author szy 
 * @version 創建時間:2018-5-20 上午10:25:06
 * 
 */
public class Testasync {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    if(task0() == true){
      System.out.println("執行完畢,看異步結果");
    }
    
  }

  
  public static void task1(){
    System.out.println("task1 is start");
  }
  
  public static void task2(){
     ExecutorService executor = Executors.newFixedThreadPool(1);
     executor.submit(new Callable(){

      @Override
      public Object call() throws Exception {
        // TODO Auto-generated method stub
        
        //增加睡眠時間,便于查看結果
        /* try {
            Thread.sleep(10000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }*/
         
        //異步提交
        int sum = 0;
        for (int i = 0; i < 10000; i++) {
           sum += i;
        }
        System.out.println("task2執行數據的大量導入或者導出");
        System.out.println("task2="+sum);
        System.out.println("task2導入或者導出完成");
        return null;
      }
       
       
     });
    
  }
  
  public static void task3(){
    System.out.println("task3 is start");
    int j = 0;
    while(true) {
      if(j++ > 10) {
        break;
      }
      System.out.println("------------task3 end-----------");
    }
  }
  
  public static boolean task0(){
    task1();
    task2();
    task3();
    return true;
  }
}

然后看結果:

task1 is start
task3 is start
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
------------task3 end-----------
task2執行數據的大量導入或者導出
執行完畢,看異步結果
task2=49995000
task2導入或者導出完成

可以看出,task1 和task3先執行了,并且方法在沒有等待task2的情況下,直接結束了。

異步的task2另開了一個線程,自己在執行。和主線程已經無關了。

不過,這種在eclipse中以deubug模式是看不出來的。

看完上述內容,你們對Java項目中的線程池異步怎么利用 ExecutorServic實現有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尤溪县| 永福县| 清苑县| 万载县| 苍溪县| 沙雅县| 兴隆县| 英吉沙县| 无锡市| 滨海县| 松溪县| 垣曲县| 于田县| 梅州市| 涞水县| 巩义市| 台东市| 周宁县| 大邑县| 鄂托克旗| 永平县| 宁安市| 青田县| 玉林市| 铜川市| 江北区| 勐海县| 四川省| 通城县| 黄浦区| 灵川县| 常熟市| 大同市| 东乌| 冷水江市| 新郑市| 石嘴山市| 万盛区| 高雄县| 黄石市| 陇西县|