最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java ExecutorServic線程池異步實現(xiàn)流程

 更新時間:2020年12月01日 11:37:04   作者:手撕高達的村長  
這篇文章主要介紹了Java ExecutorServic線程池異步實現(xiàn)流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

相信大家都在項目中遇到過這樣的情況,前臺需要快速的顯示,后臺還需要做一個很大的邏輯。比如:前臺點擊數(shù)據(jù)導入按鈕,按鈕后的服務端執(zhí)行邏輯A,和邏輯B(執(zhí)行大量的表數(shù)據(jù)之間的copy功能),而這時前臺不能一直等著,要返回給前臺,告訴正在處理中就行了。這里就需要用到異步了。

點擊按鈕 -> 邏輯A ->邏輯B(異步) -> 方法結束。

到底,項目需求明確了,就引入了ExecutorServic線程池。

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

  • newCachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
  • newFixedThreadPool 創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。
  • newScheduledThreadPool 創(chuàng)建一個定長線程池,支持定時及周期性任務執(zhí)行。
  • newSingleThreadExecutor 創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務,保證所有任務按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author szy 
 * @version 創(chuàng)建時間: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("執(zhí)行完畢,看異步結果");
    }
    
  }

  
  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執(zhí)行數(shù)據(jù)的大量導入或者導出");
        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執(zhí)行數(shù)據(jù)的大量導入或者導出
執(zhí)行完畢,看異步結果
task2=49995000
task2導入或者導出完成

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java防反編譯最簡單的技巧分享

    java防反編譯最簡單的技巧分享

    這篇文章主要給大家分享了關于java防反編譯最簡單的技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-09-09
  • maven配置文件pom增加變量取版本號方式

    maven配置文件pom增加變量取版本號方式

    這篇文章主要介紹了maven配置文件pom增加變量取版本號方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • idea指定maven的settings文件不生效的問題解決

    idea指定maven的settings文件不生效的問題解決

    本文主要介紹了idea指定maven的settings文件不生效的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • SpringSecurity實現(xiàn)動態(tài)url攔截(基于rbac模型)

    SpringSecurity實現(xiàn)動態(tài)url攔截(基于rbac模型)

    本文主要介紹了SpringSecurity動態(tài)url攔截,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決Spring?MVC中文亂碼的編碼配置

    解決Spring?MVC中文亂碼的編碼配置

    這篇文章主要為大家介紹了解決SpringMVC中文亂碼的編碼配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • JAVA?ImageIO.read方法報錯/無效問題及解決

    JAVA?ImageIO.read方法報錯/無效問題及解決

    這篇文章主要介紹了JAVA?ImageIO.read方法報錯/無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Ubuntu快速安裝jdk的教程

    Ubuntu快速安裝jdk的教程

    這篇文章主要為大家詳細介紹了Ubuntu快速安裝jdk的教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式)

    基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式)

    這篇文章主要介紹了基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)簡單文字驗證碼以及人機驗證

    Java實現(xiàn)簡單文字驗證碼以及人機驗證

    人機驗證技術的發(fā)展也在不斷進化,從最初的簡單驗證碼到現(xiàn)在的人工智能驅動的高級驗證系統(tǒng),下面這篇文章主要介紹了Java實現(xiàn)簡單文字驗證碼以及人機驗證的相關資料,需要的朋友可以參考下
    2025-04-04
  • Java如何求交集、并集、差集

    Java如何求交集、并集、差集

    這篇文章主要介紹了Java如何求交集、并集、差集問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

苗栗县| 兴山县| 明光市| 陵水| 信阳市| 博白县| 揭东县| 宁城县| 乐业县| 牙克石市| 运城市| 鄄城县| 秦皇岛市| 宁南县| 吴忠市| 长海县| 杭州市| 宜川县| 乐昌市| 嘉定区| 元朗区| 中卫市| 玉门市| 芦山县| 望都县| 蓬莱市| 江北区| 东乌珠穆沁旗| 介休市| 开封市| 广河县| 竹山县| 乌什县| 凤凰县| 顺平县| 大同市| 荃湾区| 西贡区| 城步| 珲春市| 贵德县|