码迷,mamicode.com
首页 > 编程语言 > 详细

java8

时间:2018-02-02 17:14:09      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:java8   target   ash   存在   join   编程知识   lan   future   compute   

*****************************************************************************

java8编程知识,流式特性可参考http://www.php.cn/java-article-353260.html

*****************************************************************************

 

java8中Map新增了一个computeIfAbsent()方法,判断是否存在key,若存在则返回value,否则则执行函数

// Map.computeIfAbsent(key,Function<T,R>)
public static Long getLong(Integer integer) { Map<Integer, Long> map = Maps.newHashMap(); long f = map.computeIfAbsent(integer, p -> { Integer result = p * 2; return result.longValue(); }); return f; }

 

多线程:CompletableFuture

——不使用工厂方法创建CompletableFuture

public CompletableFuture<String> completableFuture() {
    CompletableFuture<String> future = new CompletableFuture<>();
    new Thread(() -> {
        System.out.println("请开始你的表演...");
        try {
            Thread.sleep(1000L);
       // 接受返回值 future.complete("hello World"); } catch (InterruptedException e) { e.printStackTrace();
       // 捕捉线程中抛出的异常,会抛到调用者 future.completeExceptionally(e); } })
  // 必须启动线程,否则future无法储存返回值
  .start(); return future; }
// 立即返回future,不会被阻塞(等待线程执行结束)
CompletableFuture<String> future = completableFuture();
// join与get方法的目的一样,区别在于空值时get会抛出异常而join则会返回null,此时会阻塞 System.out.println(future.join());
// 输出:
请开始你的表演...

      hello World


 

——使用工厂类创建CompletableFuture对象,supplyAsync方法接收Supplier(提供者接口),并保存返回值

public CompletableFuture<String> completableFuture(String hello) {
    return CompletableFuture.supplyAsync(() -> hello);
}

 

——thenCompose线程依赖性:线程B的执行需要线程A的结果值,其中B是同步执行,被阻塞

@Test
public void compose() {
   // thenCompose方法接收Function参数,线程A的结果值以value形参传入B线程并返回一个CompletableFuture对象,对象中保存hello World结果值 CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello").thenCompose(value -> CompletableFuture.supplyAsync(() -> value + " World")); String result = future.join(); System.out.println("result = " + result); }
// 输出:result = hello World

 

——thenCombine线程合并:线程A和线程B都执行结束后,各自返回一个值,使用BiFunction接口接收这两个结果并进行操作,A,B线程异步执行,B线程不会被阻塞

@Test
public void compose() {
  // thenCombine接收CompletionStage和BiFunction参数,两个线程同时执行并返回v1,v2 CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello").thenCombine(CompletableFuture.supplyAsync(() -> " world"), (v1, v2) -> v1 + v2); String result = future.join(); System.out.println("result = " + result); }
// 输出:result = hello world

 

java8

标签:java8   target   ash   存在   join   编程知识   lan   future   compute   

原文地址:https://www.cnblogs.com/antlord/p/8370744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!