Java 8 并发编程

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjdyd.html