原文请参考微信公众号: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并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...
│ Java并发编程.png │ ppt+源码.rar │ 高并发编程第二阶段01讲、课程大纲及主要内容介绍.wmv │ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、...
Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。Java语音项目的...
并发编程实战》阅读笔记 有关 Java 并发编程~ 别急别急,在重写它啦~,会补充一些新的内容进去,预计 2020/02 完成。 Content Java 并发编程基础 保证线程安全的两个角度 构造安全的并发应用程序 Java 并发高级主题 ...
11. **案例分析与实战**:笔记可能包含实际的并发编程案例,帮助读者更好地将理论知识应用到实践中。 通过深入学习这份"Java并发实践-学习笔记",开发者能够提升自己在处理多线程和并发问题上的能力,从而设计出更...
Java并发编程学习笔记 本项目整理自《Java7并发编程实战手册》,感兴趣的话推荐阅读原著 本章内容包括: 线程的创建和运行 线程信息的获取和设置 线程的中断 线程中断的控制 线程的Hibernate和恢复 等待线程的终止 ...
10. **实战项目**:一套完整的开发实战笔记通常会包含一些实际项目的案例分析,通过这些项目,学习者可以将所学理论知识应用到实践中,提升解决问题的能力。 这套笔记对于Java初学者来说,是全面了解和掌握Java编程...
在并发编程部分,笔记会介绍线程的创建和管理,同步机制如synchronized关键字和Lock接口,以及并发工具类如ExecutorService、Semaphore和CountDownLatch。了解这些内容能帮助你在多核环境下编写高效的程序。 对于...
Java并发编程是Java开发中的重要领域,特别是在大型分布式系统或者高并发应用中,对线程安全和性能优化的理解与实践至关重要。"JUC并发编程学习笔记(硅谷)"很可能包含了关于Java并发工具集(Java Util Concurrency, ...
10. **多线程**:Java提供了丰富的API支持并发编程,如Thread、Runnable接口,以及synchronized关键字,笔记可能涉及到线程的创建、同步和通信。 11. **枚举与注解**:枚举是Java中的特殊数据类型,而注解则是一种...
综上所述,这一系列学习笔记涵盖了并发编程的关键概念和实战技巧,包括Java内存模型、线程池、并发容器的使用以及常见数据结构的线程安全问题。通过深入学习这些内容,开发者可以更好地理解和解决多线程环境下的编程...
Java并发编程是编程领域中的重要组成部分,特别是在大型系统和服务器端开发中不可或缺。Java自诞生以来就内置了对多线程的支持,使得开发者能够轻松创建并行运行的任务,提升程序性能。然而,随着并发编程实践的深入...
Java在并发处理方面表现出色,笔记会讲解线程的创建与管理,包括Thread类和Runnable接口的使用,线程同步机制(synchronized、wait()、notify()、Lock接口等),以及线程池的使用和优化。 【IO与NIO】 在输入输出...
Java并发编程中的Synchronized是Java实现线程同步的关键机制,其在JDK1.6之后进行了大量的优化,包括引入了轻量级锁和偏向锁,以提升并发性能。以下是关于这些优化的详细解释: **一、重量级锁** 重量级锁是基于...
MLDN JAVA-WEB开发实战笔记PDF可能包含更多实践案例和项目经验,涵盖了如何将理论知识应用于实际开发过程中的技巧和最佳实践。通过这些笔记,开发者可以学习到如何设计和实现一个完整的Java Web应用,包括数据库设计...
异常处理是JAVA中的重要安全机制,集合框架是存储和操作数据的主要工具,IO流用于文件操作和数据传输,多线程则可以实现程序的并发执行,网络编程则是开发分布式应用的基础,反射提供了运行时动态操作类和对象的能力...
这篇“Java线程编程学习笔记(二)”很可能是对Java并发编程深入探讨的一部分,特别是涉及多线程示例的实践应用。我们将从标题、描述以及标签来推测可能涵盖的知识点,并结合"Multi-Threads Demo"这一压缩包文件名来...