浅谈Java线程并发知识点

作者:WindWant 时间:2021-10-20 13:11:13 

发布:一个对象是使它能够被当前范围之外的代码所引用:

常见形式:将对象的的引用存储到公共静态域;非私有方法中返回引用;发布内部类实例,包含引用。

逃逸:在对象尚未准备好时就将其发布。

不要让this引用在构造函数中逸出。例,在构造函数中启动线程,线程会包含对象的引用。

同步容器:对容器的所有状态进行穿行访问,Vector、Hashtable,Cllections.synchronizedMap|List

并发容器:ConcurrentHashMap,CopyOnWriteArrayList,ConcurrentLinkedQueue、BlockingQueue

list 随机访问特性的优势。

Blocking 增加了可阻塞的get set操作

ConcurrentHashMap:分离锁,为并发访问带来的高的吞吐量,同时几乎没有损失单个线程的访问性能。返回弱一致性的迭代器。

迭代器的弱一致性,在迭代器生成以后会检测容器的修改变化。

并发容器 size(), isEmpty() 弱化,返回近似结果。

CopyOnWriteArrayList:每次修改容器时复制,适用迭代需求大于修改需求情况。

生产者消费者模式,运用有界阻塞队列解耦生产者和消费者的代码。

Executor任务执行框架,实现了生产者消费者模式。

SynchronousQueue:put等待消费者可用,take等待生产者可用,适用于消费者充足的情景。

双端队列(deque)关联于窃取工作模式(work stealing),区别于生产者消费者模式中所有消费者共享一个工作队列,工作窃取模式每一个消费者都有自己的双端队列,如果一个消费者完成自己的全部工作,就可以偷取其它消费者队列队尾的任务。

工作窃取模式适用于当运行到一个任务的某一个单元时,可能会识别出更多的任务,如遍历文件。

当一个方法能够抛出InterruptedException时,说明它是可阻塞方法。抛出或捕获InterruptedException。

Synchronizer:同步者---semaphore、barrier、latch,封装状态,决定线程在此状态下的行为(通过或阻塞),提供操控状态的方法,高效的等待同步者进入期望的状态。

latch闭锁:延迟线程进度直到线程到达一个终点状态,像一个一次性开关。可以用来确保特定活动直到其它活动完成才发生。

例如:

  • 确保一个计算不会被执行,直到需要的资源都被初始化。

  • 确保一个服务不会被开始,直到依赖的其它服务已经开始。

  • 等待,直到活动的所有部分都为继续处理做好准备。

FutureTask可以作为闭锁,抽象的可携带结果的计算,通过callable实现。Future.get依赖于任务的执行状态,任务运行完成则返回结果,否则一直等待,

Executor框架利用FutureTask完成异步任务。

semapher信号量:用来控制能够同时访问某特定资源的活动数量或同时执行某一给定操作的数量,资源池,容器边界。

barrier关卡:类似于闭锁,区别所有的线程必须同时到达关卡,才能继续处理,闭锁等待的是时间,关卡等待的是其它线程,重复使用。通过关卡,await会为每一个线程返回唯一的到达索引号,可以用它来选举产生一个领导,在下一次迭代中承担一些特殊任务。

Exchanger一种关卡的形式。

来源:http://www.cnblogs.com/niejunlei/p/6202763.html

标签:Java,线程并发
0
投稿

猜你喜欢

  • 微信第三方登录Android实现代码

    2023-07-27 08:05:49
  • JAVA抽象类,接口,内部类详解

    2023-11-09 16:37:25
  • ElasticSearch查询文档基本操作实例

    2023-11-24 14:20:02
  • 一个依赖搞定 Spring Boot 接口防盗刷的流程分析

    2023-06-01 16:46:41
  • SpringBoot防止大量请求攻击的实现

    2023-11-24 16:42:54
  • Java查看和修改线程优先级操作详解

    2023-09-13 08:25:30
  • C#异步下载文件

    2021-10-05 03:23:40
  • Java泛型定义与用法实例详解

    2023-11-25 11:50:28
  • c#读取文件详谈

    2023-03-04 14:47:30
  • 配置springboot项目使用外部tomcat过程解析

    2021-11-22 22:34:25
  • Android带清除功能的输入框控件EditTextWithDel

    2022-02-13 16:53:27
  • spring cache注解@Cacheable缓存穿透详解

    2023-12-23 13:41:25
  • 解决SpringMVC拦截器path路径的坑

    2023-03-24 17:02:01
  • Android编程连接MongoDB及增删改查等基本操作示例

    2023-11-28 14:49:16
  • 详解MyBatis配置typeAliases的方法

    2023-11-29 06:21:52
  • 提权函数之RtlAdjustPrivilege()使用说明

    2021-08-27 04:16:49
  • SpringBoot整合SpringSecurity实现JWT认证的项目实践

    2022-06-23 22:09:09
  • springboot读取自定义配置文件时出现乱码解决方案

    2022-01-29 11:09:40
  • java并发包JUC诞生及详细内容

    2022-04-06 02:57:00
  • Java设置PDF有序和无序列表的知识点总结

    2022-04-18 03:29:27
  • asp之家 软件编程 m.aspxhome.com