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