亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java8中forkjoin和optional框架使用

2024-07-13 10:15:24
字體:
來源:轉載
供稿:網友

并行流與串行流

并行流就是把一個內容分成多個數據塊,并用不同的線程分別處理每個數據塊的流。

java 8 中將并行進行了優化,我們可以很容易的對數據進行并行操作。Stream API 可以聲明性地通過 parallel()與 sequential()在并行流與順序流之間進行切換。

java8,forkjoin,optional

了解 Fork/Join 框架

Fork/Join 框架:就是在必要的情況下,將一個大任務,進形拆分(fork)成若干個小任務(拆到不可再拆時),再將一個個的小任務運行的結果進行join匯總。

Fork/Join 框架與傳統線程池的區別:

采用“工作竊取”模式(work-stealing):

當執行新的任務時,它可以將其拆分成更小的任務執行,并將小任務加到線程隊列中,然后再從一個隨機線程的隊列中偷一個并把它放在自己的隊列中。

相對于一般的線程池實現,fork/join框架的優勢體現在對其中包含的任務的處理方式上.在一般的線程池中,如果一個線程正在執行的任務由于某些原因無法繼續運行,那么該線程會處于等待狀態.而在fork/join框架實現中,如果某個子問題由于等待另外一個子問題的完成而無法繼續運行.那么處理該子問題的線程會主動尋找其他尚未運行的子問題來執行.這種方式減少了線程的等待時間,提高了性能。

import java.time.Duration;import java.time.Instant;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.RecursiveTask;import java.util.stream.LongStream;public class TestForkJoin {  public static void main(String[] xx){      }  private static void test1(){  	Instant start=Instant.now();    ForkJoinPool pool=new ForkJoinPool();    ForkJoinTask<Long> task = new ForkJoinCalculate(0L, 10000000000L);    long sum = pool.invoke(task);    System.out.println(sum);    Instant end=Instant.now();    System.out.println("消耗時間"+Duration.between(start, end).toMillis()+"ms");//消耗時間3409ms  }  private static void test2(){    Instant start=Instant.now();    Long sum = LongStream.rangeClosed(0L, 10000L)               .parallel()               .reduce(0,Long::sum);    System.out.println(sum);    Instant end=Instant.now();    System.out.println("消耗時間" + Duration.between(start, end).toMillis()+"ms");//消耗時間2418ms  } }class ForkJoinCalculate extends RecursiveTask<Long>{  private static final long serialVersionUID = 1234567890L;//序列號  private long start;  private long end;  private static final long THRESHOLD=2500000000L;//臨界值  public ForkJoinCalculate(long start,long end) {    this.start=start;    this.end=end;  }  @Override  protected Long compute() {    long length = end - start;    if(length <= THRESHOLD){      long sum=0;      for(long i = start; i <= end; i++){        sum += i;      }      return sum;    }else{      long middle = (start+end)/2;      ForkJoinCalculate left = new ForkJoinCalculate(start, middle);      left.fork();      ForkJoinCalculate right=new ForkJoinCalculate(middle+1, end);      right.fork();      return left.join() + right.join();    }  }}

Optional類

Optional< T>類(java.util.Optional) 是一個容器類,代表一個值存在或不存在。

原來用null表示一個值不存在,現在 Optional可以更好的表達這個概念。并且可以避免空指針異常。

常用方法:

Optional.of(T t) : 創建一個 Optional 實例

Optional.empty() : 創建一個空的 Optional 實例

Optional.ofNullable(T t):若 t 不為 null,創建 Optional 實例,否則創建空實例

isPresent() : 判斷是否包含值

orElse(T t) : 如果調用對象包含值,返回該值,否則返回t

orElseGet(Supplier s) :如果調用對象包含值,返回該值,否則返回 s 獲取的值

map(Function f): 如果有值對其處理,并返回處理后的Optional,否則返回 Optional.empty()

flatMap(Function mapper):與 map 類似,要求返回值必須是Optional

public class OptionalTest1 {  public static void main(String[] args){  	  	String s = new String("Ha");//  	Optional<String> op = Optional.of(null);//  	//  	String s1 = op.get();//  	System.out.println(s1);  	//  	Optional<String> op1 = Optional.empty();//  	String s1 = op1.get();//  	System.out.println(s1);    	  	Optional<String> op1 = Optional.ofNullable(null);//  	System.out.println(op1.isPresent());//  	System.out.println(op1.orElse(new String("Google")));  	//System.out.println(op1.orElseGet(() -> new String("Ali")));  	  	Optional<String> op2 = op1.map((x) -> x.toLowerCase());  	String s2 = op2.get();  	System.out.println(s2);  	  }}
@Test  public void test5(){    Man man=new Man();    String name=getGodnessName(man);    System.out.println(name);  }  //需求:獲取一個男人心中女神的名字  public String getGodnessName(Man man){    if(man!=null){      Godness g=man.getGod();      if(g!=null){        return g.getName();      }    }    return "蒼老師";  }  //運用Optional的實體類  @Test  public void test6(){    Optional<Godness> godness=Optional.ofNullable(new Godness("林志玲"));    Optional<NewMan> op=Optional.ofNullable(new NewMan(godness));    String name=getGodnessName2(op);    System.out.println(name);  }  public String getGodnessName2(Optional<NewMan> man){    return man.orElse(new NewMan())         .getGodness()         .orElse(new Godness("蒼老師"))         .getName();  }//注意:Optional 不能被序列化public class NewMan {  private Optional<Godness> godness = Optional.empty();  private Godness god;  public Optional<Godness> getGod(){    return Optional.of(god);  }  public NewMan() {  }  public NewMan(Optional<Godness> godness) {    this.godness = godness;  }  public Optional<Godness> getGodness() {    return godness;  }  public void setGodness(Optional<Godness> godness) {    this.godness = godness;  }  @Override  public String toString() {    return "NewMan [godness=" + godness + "]";  }}

以上就是我們給大家整理的java8中forkjoin和optional框架使用心得的全部內容,大家在學習的時候如果還有任何不明白的地方可以在下方的留言區討論。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久一区二区| 国产日韩欧美一二三区| 国产精品一香蕉国产线看观看| 亚洲人成网站免费播放| 91在线网站视频| 热久久这里只有| 色爱精品视频一区| 亚洲第一av在线| 91最新在线免费观看| 日韩精品视频在线| 中文在线资源观看视频网站免费不卡| 欧美激情中文字幕在线| 1769国产精品| 国产精品久久久久久久久久| 欧美日韩国产在线| 亚洲精品动漫久久久久| 国产精品视频成人| 91午夜在线播放| 成人国产在线视频| 亚洲永久在线观看| 国产精品96久久久久久又黄又硬| 日本免费久久高清视频| 欧美日韩一区免费| 欧美在线一级视频| 国产精品国产亚洲伊人久久| 色视频www在线播放国产成人| 在线观看久久久久久| 日本精品久久久久影院| 日本高清不卡的在线| 欧美激情精品久久久久久免费印度| 国产欧美一区二区三区在线看| 成人网欧美在线视频| 国产免费一区二区三区香蕉精| 一区二区三区四区精品| 国产精品xxx视频| 青青草成人在线| 亚洲白虎美女被爆操| 日韩欧美在线观看视频| 亚洲成人久久一区| 亚洲成在人线av| 久久国产精品久久国产精品| 成人情趣片在线观看免费| 亚洲国产91色在线| 亚洲永久在线观看| 日本一区二区三区四区视频| 久久九九亚洲综合| 久久久成人的性感天堂| 国产精品视频网站| 欧洲成人在线观看| 亚洲激情国产精品| 韩国19禁主播vip福利视频| 一本一道久久a久久精品逆3p| 91精品在线一区| 亚洲视频在线免费看| 色久欧美在线视频观看| 亚洲成人精品视频在线观看| 国产精品亚洲一区二区三区| 成人春色激情网| 久久久久国色av免费观看性色| 亚洲欧美中文日韩在线| 18性欧美xxxⅹ性满足| 亚洲人高潮女人毛茸茸| 精品高清美女精品国产区| 亚洲第一视频网| 亚洲男人天天操| 国产欧美精品va在线观看| 国产精品自产拍在线观看中文| 久久精品国产欧美亚洲人人爽| 国产剧情久久久久久| 亚洲精品美女在线| 亚洲人成在线免费观看| 亚洲自拍偷拍网址| 黑人巨大精品欧美一区二区一视频| 欧美国产日韩一区二区在线观看| 日韩av在线最新| 欧美在线免费观看| 精品免费在线观看| 欧美性资源免费| 亚洲精品小视频在线观看| 国产日韩欧美自拍| 国产精品99蜜臀久久不卡二区| 久久人人爽人人爽人人片av高清| 久久九九国产精品怡红院| 欧美性猛交xxxx乱大交| y97精品国产97久久久久久| 亚洲欧美国产一本综合首页| 国产亚洲激情视频在线| 日韩在线观看网址| 精品久久久一区| 在线视频欧美日韩精品| 亚洲男人第一网站| 久久精品青青大伊人av| 91精品国产高清| 国产精品爱啪在线线免费观看| 一个色综合导航| 亚洲成人亚洲激情| 日韩在线国产精品| 国产精品免费视频xxxx| 久久99精品久久久久久琪琪| 国产99久久精品一区二区永久免费| 久久中文精品视频| 亚洲国产精品小视频| 成人做爽爽免费视频| 国产精品一区二区三区在线播放| 国产精品日韩久久久久| 亚洲国产99精品国自产| 538国产精品一区二区在线| 久久不射热爱视频精品| 国产欧洲精品视频| 欧美日韩国产一中文字不卡| 中文字幕亚洲一区在线观看| 国产精品大片wwwwww| 69视频在线免费观看| 欧美日韩一区二区三区在线免费观看| 中文字幕欧美国内| 欧美激情伊人电影| 亚洲国产精品悠悠久久琪琪| 亚洲在线观看视频| 91在线视频免费| 91亚洲精品久久久| 亚洲成色999久久网站| 92福利视频午夜1000合集在线观看| 亚洲福利在线看| 91久热免费在线视频| 亚洲成年网站在线观看| 欧美亚洲日本黄色| 亚洲欧美在线一区二区| 日韩不卡中文字幕| 久久人人爽亚洲精品天堂| 欧美激情精品久久久久久| 久久久精品在线观看| 亚洲第一偷拍网| 欧美国产日产韩国视频| 亚洲男人天堂古典| 久热国产精品视频| 97免费在线视频| 国产一区二区三区免费视频| 日韩欧美aaa| 成人黄色中文字幕| 中文精品99久久国产香蕉| 午夜精品久久久久久久久久久久久| 久久99精品国产99久久6尤物| 欧美大胆a视频| 亚洲精品一区二区三区婷婷月| 日韩视频在线观看免费| 成人在线中文字幕| 亚洲精品一区二区三区婷婷月| 性欧美xxxx视频在线观看| 欧美放荡办公室videos4k| 欧美色视频日本高清在线观看| 久久视频在线视频| 亚洲另类图片色| 欧美性猛交xxxx富婆弯腰| 超碰97人人做人人爱少妇| 国产精品久久久久久久久粉嫩av| 91成人国产在线观看| 一本色道久久综合狠狠躁篇的优点| 在线精品高清中文字幕| 欧美大片免费看| 日韩电影在线观看中文字幕| 久久成人免费视频| 51精品在线观看| 久久精品99久久久香蕉| 国产精品高潮在线|