JUC
zyk1.
愿你历尽千帆 归来仍是少年
展开
-
生产者消费者问题 传统版+Lock版
题目 现在有生产者消费者两个线程 可以对初始值为0的一个变量进行操作 实现生产者线程对该变量加1 消费者线程立刻对该变量减1 实现交替 来10轮 (我们要求生产1个后 马上就进行消费)(消费一个后 就马上进行生产) 注意 生产者加1之后 消费者立马减1 结果应该是 1 0 1 0 1 0 … 传统版 package com.zyk; //资源...原创 2020-04-05 22:59:57 · 103 阅读 · 0 评论 -
Synchronized和Lock的区别
Synchronized和Lock的区别 我们首先先大致的说一下他们的区别 然后举ReentrantLock实现精确唤醒的例子 synchronized是关键字 属于JVM层面 Lock是具体类 (java.util.concurrent.Locks.Lock) synchronized 不用用户去手动释放锁 当synchronized代码执行完成之后会自动让线程释放锁的占用 Reent...原创 2020-04-05 22:38:40 · 111 阅读 · 0 评论 -
生产者消费者问题 阻塞队列版
生产者消费者问题 阻塞队列版 package com.zyk; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.Ato...原创 2020-04-05 22:22:42 · 145 阅读 · 0 评论 -
阻塞队列
组成介绍 种类分析 jdk提供了7个阻塞队列 分别是 ArrayBlockingQueue :由数组结构组成的有界阻塞队列 LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列 PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列 DelayQueue:一个使用优先级队列实现的无界阻塞队列 SynchronousQueue:一个不存储元素的阻塞...原创 2020-04-04 10:42:22 · 109 阅读 · 0 评论 -
可重入锁+自旋锁+读写锁
可重入锁 我们来看什么是可重入锁 可重入锁的核心意思 是同一个线程在外层方法获取锁的时候 在进入内层方法会自动获取锁 这里我们分别举synchronized 和 ReentrantLock的例子 synchronized是可重入锁 package com.robot; class Phone{ //外层方法 public synchronized void sendMes() { ...原创 2020-04-04 10:36:21 · 195 阅读 · 0 评论 -
volatile笔记
volatile笔记 volatile 关键字 定义 Java虚拟机提供的轻量级同步机制 特性 保证可见性 不保证原子性 禁止指令重排 JMM结构规范 JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋...原创 2020-03-29 10:17:45 · 111 阅读 · 0 评论 -
单例模式 双重检查判断 不一定安全
单例模式 双重检查判断 不一定安全 双重检查判断 public class Singleton { private static Singleton instance=null; private Singleton(){ } public static Singleton getInstance() { if(instance==null){ ...原创 2020-03-29 16:01:12 · 423 阅读 · 0 评论 -
CAS学习+ABA问题
CAS学习+ABA问题 CAS 定义 比较和交换 (Compare And Swap)它是一条cpu并发原语 是多线程同步的原子指令 作用 判断内存中某个位置的值是否是预期值 如果是就更改为新的值 Unsafe类中getAndAddInt()方法 public final int getAndAddInt(Object var1, long var2, int var4) { in...原创 2020-03-31 11:14:11 · 163 阅读 · 0 评论