原文请参考微信公众号:https://mp.weixin.qq.com/s/RWYeM-n0k7IPVzqMH8vBIw
1、double和long是64位数值变量,JVM允许(非volatile类型的double和long)将64位的读操作或写操作分解为两个32位的操作。当读取一个非volatile类型的long变量时,如果对该变量的读操作和写操作在不同的线程中执行,name很可能读取到某个值的高32位和另一个值得低32位;因此在多线程情况下,用volatile变量修饰double和long,或用锁才能保证其线程安全。
2、加锁的含义不仅仅局限于互斥行为,还包括内存可见性;加锁机制既可以确保变量的可见性,也可确保原子性,volatile只能确保可见性
3、不可变对象一定是线程安全的,final可用于构造不可变对象
4、synchronized关键字加在方法上,并不能保证方法内的全局变量是线程安全的,只能保证此变量在方法内的操作是原子性,不能保证此变量其他操作的原子性,所有不是线程安全的;最好的方式是将synchronized加在变量上;
-
public class Helper {
-
private List<T> list = Collentions.synchronizedList(new ArrayList<T>())
-
-
//非线程安全的list操作;若想实现list的线程安全,则可以将所有修改list的方法上都加synchronized
-
public synchronized void putIfAbsent(){
-
list.add(T);
-
}
-
//线程安全的list操作,另外一个线程操作list时,需要确定list上是否有锁,因此是list是线程安全的
-
public void putIfAbsent(){
-
synchronized(list){
-
list.add(T);
-
}
-
}
-
}
5、Queue用来临时保存一组等待处理的元素,Queue上的操作不会阻塞,如果队列为空,获取值是返回空值;Queue是通过LinkedList来实现的
6、BlockingQueue扩展了Queue,增加了可阻塞的插入和获取等操作,如果队列为空,获取队列中的值时,将一直阻塞,直到队列中出现一个可用的数据;如果队列已满,则插入元素的操作将一直阻塞,直到队列中出现可用的空间。阻塞队列在生产者-消费者模式中非常实用;
7、Deque是一个双端队列,是对Queue的扩展,实现了在队列头和队列尾的高效插入和移除;如果一个消费者完成了自己双端队列的全部工作,它可以从其他消费者双端队列的末尾秘密获取工作进行处理;
8、闭锁是一种同步工具类,在闭锁到达结束状态之前,这一扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有线程通过;CountDownLatch、FutureTask都可以作为闭锁;
9、栅栏类似于闭锁,区别在于,所有线程必须同时到达栅栏位置,才能继续执行,闭锁用于等待事件,而栅栏用于等待其他线程;
10、计数信号量用来控制同时访问某个特定资源的操作数量,或同时执行某个指定操作的数量,还可用来实现某种资源池,或对容器施加边界
11、CountDownLatch常用语闭锁,Semaphore用于计数信号量,CyclicBarrier用于栅栏;Exchanger是两方栅栏,可用于数据交换,如一个线程想缓冲区写入数据,而另一个线程从缓冲区读取数据,两个线程可使用Exchanger汇合,并将满的缓冲区和空的缓冲区交换
类名 核心方法 CountDownLatch countDown(),await() Semaphore acquire(),release() CyclicBarrier await()
微信扫一扫
关注该公众号
相关推荐
读书笔记-Java并发编程实战-基础篇
java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括可见性、发布与逸出、线程封闭、不可变性、安全发布等内容
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
java并发编程实战pdf学习笔记 总结了重要的知识点
《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括线程安全类设计、实例封闭、线程安全性委托、现有线程安全类中添加功能和文档化同步策略等内容
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存
Java并发编程学习笔记
《Java并发编程的艺术》笔记 第一章 并发编程的挑战 第二章 Java并发机制的底层实现原理 volatile的两条实现原则: 1. Lock前缀指令会引起处理器缓存回写到内存 2. 一个处理器的缓存回写到内存会导致其他...
Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。Java语音项目的...
并发编程实战》阅读笔记 有关 Java 并发编程~ 别急别急,在重写它啦~,会补充一些新的内容进去,预计 2020/02 完成。 Content Java 并发编程基础 保证线程安全的两个角度 构造安全的并发应用程序 Java 并发高级主题 ...
Java并发编程学习笔记 本项目整理自《Java7并发编程实战手册》,感兴趣的话推荐阅读原著 本章内容包括: 线程的创建和运行 线程信息的获取和设置 线程的中断 线程中断的控制 线程的Hibernate和恢复 等待线程的终止 ...
主要介绍了Java 并发编程学习笔记之Synchronized底层优化的相关资料,主要包含了重量级锁,轻量级锁,偏向锁和其他优化等方面,有需要的小伙伴可以参考下
Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更好的选择。本文是对并发编程的核心理论做了下小...
Java并发编程.pdf JAVA核心知识点整理.pdf Java高级架构知识点整理.pdf Java高级架构面试知识点整理.pdf JVM与性能优化知识点整理.pdf MySQL性能调优与架构设计解析文档.pdf Nginx入门到实战.pdf springCloud笔记....
《实战Java高并发程序设计》笔记和源码笔记《实战Java高并发程序设计》中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了笔者精心制作相关笔记并整理...
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用...
并发编程实战 自己动手写Java虚拟机,张秀宏 Spring 技术内幕:深入解析 Spring架构与设计原理(第2版) 数据库 MySQL技术内幕:Innodb 存储引擎第二版,姜承尧 Redis 设计与实现 操作系统: Linux 私