zoukankan      html  css  js  c++  java
  • 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
    ", Thread.currentThread.getName());
        System.out.printf("Sub Thread is completed, result is %s
    ", runnable.getCompleted());
    }
    
    private static class CompletableRunnable implements Runnable{
        private volatile boolean completed = false;
    
        @Override
        public void run(){
            System.out.printf("[Thread: %s] is running
    ", 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
  • 相关阅读:
    修改Tomcat的端口号方法
    Java与数据库对应的日期类型
    解决ora-00054 Oracle锁表问题
    qemu+gdb调试内核出现remote ‘g’ packet reply is too long
    构建调试Linux内核网络代码的环境MenuOS系统
    c语言实现简单的hello/hi聊天程序
    traceroute命令研究报告
    c++对象初始化中各构造器的顺序
    嵌入式面试题(1)
    Android驱动笔记(8)——bugreport介绍
  • 原文地址:https://www.cnblogs.com/walkinhalo/p/11125719.html
Copyright © 2011-2022 走看看