![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC学习
文章平均质量分 79
单纯的夙愿
这个作者很懒,什么都没留下…
展开
-
JUC-1. volatile关键字与内存可见性
一、volatile关键字 适用:当多个线程共享一个变量时,如果有一个线程修改此变量,其他线程读取此变量值。 特性: 内存可见性。 阻止重排序。 注意: 只能确保变量可见性,并不能确保原子性。 volatile不具备“互斥性”。 3. 应用示例 volatile保证了数据可见性。性能比synchronize效率高。 /** * 关键字:volatil...原创 2018-03-03 15:14:17 · 239 阅读 · 0 评论 -
JUC-4.CountDownLatch闭锁
CountDownLatch CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行: * 确保某个计算在其需要的所有资源都被初始化之后才继续执行; * 确保某个服务在其依赖的所有其他服务都已经启动之后才启动 * 等待直到某个操作所...原创 2018-03-06 00:07:47 · 276 阅读 · 0 评论 -
JUC-3.ConcurrentHashMap锁分段机制
一、同步容器与并发容器 1. 同步容器 早起的JDK中,有两种现成的同步容器,Vector和HashTable,可以直接new对象获取 ; 在JDK1.2中,引入了同步封装类,可以由Collections.synchronizedXxxx等方法创建; 同步容器的问题 HashTable 效率低 符合操作存在安全问题,需要额外加锁保护; 常见复合操作如下: 迭代:反复访...原创 2018-03-05 23:42:02 · 304 阅读 · 0 评论 -
JUC-9.线程按序交替.md
1. 线程按序交替 1.1 题目 编写一个程序,开启3个线程,这三个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出的结果必须按顺序显示。 如;ABCABCABC。。依次打印 1.2 代码 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.L...转载 2018-03-11 23:39:39 · 289 阅读 · 0 评论 -
JUC-8.Condition线程通信
1. 线程通信 上节讲的虚假唤醒,使用的是内置锁synchronized,那么我们使用同步锁(显示锁)Lock其实也一样达到效果。 我们知道,内置锁通过wait()notify()notifyAll()进行线程间通信。同步锁也一样是否一样可以进行通信呢? 1.1 显示锁Condition线程通信 Contion接口描述了可能会与锁有关联的条件变量。单个Lock可能与多个Conditio...原创 2018-03-11 23:12:24 · 260 阅读 · 0 评论 -
JUC-7.生产者消费者案例-虚假唤醒
1. 生产者和消费者案例 以下为生产者和消费者共享店员进行进货和售货的案例,生产者在库存已满时也不停进货,消费者在库存为0时也不停售货。 那么在实际生产中,就会造成生产者在库存已满时进货,造成数据丢失。消费者也会在不停的消费。 /** * 生产者和消费者案例 * @author xiaobin * @date 2018/3/11 */ public class TestProdu...原创 2018-03-11 22:37:39 · 421 阅读 · 0 评论 -
JUC-6.同步锁Lock
1. 用于解决多线程安全的问题的方式 1.1. 内置锁:关键字synchronized 同步代码块 同步方法 /** * 内置锁:synchronized关键字 * @author xiaobin * @date 2018/3/11 */ public class TestSynchronize { public static void main(String[]...原创 2018-03-11 16:33:32 · 251 阅读 · 0 评论 -
JUC-5.创建执行线程的方式
1. 创建执行线程的方式 创建执行线程一共有4种方式。分别是继承Thread、实现接口Runnable接口、实现Callable接口、线程池。 1.1 继承Thread 继承Thread并重写父类run()方法,通过start()方法启动线程。 /** * 创建执行线程方式一:继承Tread * @author xiaobin * @date 2018/3/11 */ pu...原创 2018-03-11 16:02:04 · 295 阅读 · 0 评论 -
JUC-2. 原子变量与CAS算法
一 、 原子性 例子:i++的原子性问题:i++的操作实际上分为三个步骤 “读-改-写” int i = 10 ; i = i ++; //i为10 //分为三步 int tmp = 1; i = i + 1; i = tmp; /** * 原子性 * * @author xiaobin * @date 2018/3/3 */ public class TestAto...原创 2018-03-03 19:03:23 · 236 阅读 · 0 评论 -
JUC-10.读写锁.md
读写锁:ReadWriteLock 1. 什么是读写锁 我们在使用锁时,通常对共享数据直接加锁,虽然保证了数据访问的安全,但是性能其实也是比较低下的。所以,除了了降低锁的粒度之外,我们还是希望可以有其他更好的一些实现。 首先分析下锁的使用场景: 写写、读写 需要“互斥” 读读 不需要互斥 所以,读写锁是维护了一对锁,一个读锁,一个写锁。读锁允许多个线程同时访问,只要没有写线程时...原创 2018-03-25 22:16:49 · 296 阅读 · 0 评论