zoukankan      html  css  js  c++  java
  • JAVA并发框架

    1. Executor框架

    java,util.concurrent.*

    • 分离任务的创建和执行者的创建
    • 线程重复利用

    主要类:

    • ExecutorService线程池服务类(使用固定数量和动态增长创建的线程池)
    • Callable接口(与runnable等价,但runnable的run()方法无返回值,Callable的call()方法有返回值)
    • Future返回执行的结果

    20200211115724.png

    使用方法:

    创建线程池:

    executor=(ThreadPoolExecutor)Executors.newCachedThreadPool();//创建一个默认自增的线程池
    executor=(ThreadPoolExecutor)Executors.newFixedThreadPool(5);//创建与固定线程的线程池
    

    执行任务:

    executor.execute(task); //执行  无返回值
    //execute方法参数为一个runnable对象
    Future<Integer> result=executor.submit(calculator);//
    //参数为一个callable对象
    

    关闭:

    // 关闭线程池
    executor.shutdown();
    

    2. Fork-join框架

    适用于整体任务量不好确定的场合,计算量不确定(分治编程)

    常用类:

    • ForkJoinPool任务池
    • RecursiveAction
    • RecursiveTask

    3. 并发数据结构

    阻塞式集合:当集合为空或者为满时,等待

    非阻塞式集合:当集合为空或者为满时,不等待,返回null或异常

    List:

    • vector 同步安全,写多读少
    • Arraylist不安全
    • Collections.synchronizedList(List list)基于synchronized,效率差
    • CopyOnWriteArrayList读多写少,基于复制机制,非阻塞

    Set:

    • HashSet不安全
    • Collections.synchronizedSet(Set set)基于synchronized,效率差
    • CopyOnWriteArraySet读多写少,非阻塞

    Map:

    • Hashtable同步安全,写多读少
    • HashMap不安全
    • Collections.synchronizedMap(Map map)基于synchronized,效率差
    • ConcurrentHashMap读多写少,非阻塞

    Queue&Deque:

    • ConcurrentLinkedQueue非阻塞,也可看作一个线程安全的LinkList
    • ArrayBlockingQueue和LinkedBlockingQueue阻塞型

    4. 线程协作

    synchronized互斥锁

    Lock也可以实现同步的效果

    • tryLock方法可以预判锁是否空闲

    • 允许分离读写的操作,多个读一个写

    • 性能更好

    • 主要类

      • ReentrantLock类,可重入的互斥锁。
      • ReentrentReadWriteLock类,可重入的读写锁。
      • lock()和unlock()函数。
  • 相关阅读:
    五,系统操作命令说明
    三,linux系统的由来
    二,服务器磁盘阵列(raid)
    一服务器硬件介绍
    四,元组类型
    集合类型
    字典类型
    三,列表类型
    二,字符串类型
    一,数字类型
  • 原文地址:https://www.cnblogs.com/innndown/p/12361771.html
Copyright © 2011-2022 走看看