首页 > 编程语言 > 详细

JAVA并发框架

时间:2020-02-25 15:06:37      阅读:53      评论:0      收藏:0      [点我收藏+]

1. Executor框架

java,util.concurrent.*

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

主要类:

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

技术分享图片

使用方法:

创建线程池:

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()函数。

JAVA并发框架

原文:https://www.cnblogs.com/innndown/p/12361771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!