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

Java 8 并发编程

时间:2019-07-03 13:56:05      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:let   private   check   ide   executors   tco   int   ble   cal   

Java 1.5前

并发实现

  • Java Green Thread

java 1.2 前的线程受os内核限制, 线程=进程, 绿色线程是JVM调度, 用来模拟多线程环境. 不需要本地线程支持.

  • Java Native Thread

对比
绿色线程在线程激活和线程同步方面优于本地线程
在I/O和上下文操作方面性能要低于本地线程

编程模型

  • Thread
  • Runnable

局限性(后续版本将解决完善这部分缺陷, 可对比学习)

  • 缺少线程管理的原生支持(缺少线程池)
  • 缺少"锁"API(只有 synchronized 关键字)
  • 缺少执行完成的原生支持

变通的实现方式:


public static void main(String[] args){
    CompletableRunnable runnable = new CompletableRunnable();
    Thread thread = new Thread(runnable,"Sub");
    thread.start();
    thread.join(); //此处阻塞主线程等待Sub完成, 否则得到的结果不准确
    System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());
    System.out.printf("Sub Thread is completed, result is %s\n", runnable.getCompleted());
}

private static class CompletableRunnable implements Runnable{
    private volatile boolean completed = false;

    @Override
    public void run(){
        System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());

        completed = true;
    }

    public boolean getCompleted(){
        return completed;
    }
}
  • 执行结果获取困难
  • Double Check Locking 不确定性 (单例模式)

Java 5

并发框架

  • J.U.C

编程模型

  • Executor, Execurtors, ExecutorService 等
  • Runnable , Callable
  • Future

Java 7

并行框架

  • Fork/Join

编程模型

  • ForkJoinPool
  • ForkJoinTask
  • RecursiveAction

Future (Java 5 引入) 限制

  • 无法手工完成
  • 阻塞式结果返回
  • 无法链式多个Future
  • 无法合并多个Future的结果
  • 缺少异常处理

Java 8

异步并行框架

  • Fork/Join

编程模型

  • CompletionStage
  • CompletableFuture

其他框架

  • Spring 和 Guava 使用不同的 ListenableFuture

Java 8 并发编程

标签:let   private   check   ide   executors   tco   int   ble   cal   

原文地址:https://www.cnblogs.com/walkinhalo/p/11125719.html

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