• 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()函数。
  • 相关阅读:
    foreach
    jmeter的正则表达式
    jmeter四种参数化
    monkey测试命令
    monkey测试结果分析
    macOS Sierra下如何打开任何来源(10.12系统)
    开发中一些小技巧
    Xcode 使用技巧
    总有你需要的之 ios 小技巧 (下)
    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。
  • 原文地址:https://www.cnblogs.com/innndown/p/12361771.html
Copyright © 2020-2023  润新知