并发
文章平均质量分 86
_
果将如此
这个作者很懒,什么都没留下…
展开
-
23_AQS源码分析
前置知识:公平锁和非公平锁可重入锁LockSupport自旋锁数据结构之链表设计模式之模板设计模式是什么字面意思:抽象的队列同步器源代码:AbstractQueuedSynchronizer 简称为AQS技术翻译:是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。这里的同步器组件指CountDownLatch、Semaphore、ReentrantLock、Re原创 2021-01-25 21:01:05 · 2364 阅读 · 14 评论 -
22_LockSupport
是什么官方解释:LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。一句话:LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程怎么玩线程等待唤醒机制(wait/notify)3种让线程等待和唤醒的方法方式1: 使用synchronized使用Object中的wait()方法让线程等待, 使用Object中的notify()方法唤醒线程正常情况:package com.aqs.locksupport;/** * @Aut原创 2021-01-25 20:50:00 · 386 阅读 · 0 评论 -
21_可重入锁
可重入锁: 又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提:锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。类似于家里面的大门,进入之后可以进入厕所、厨房等“可重入锁”这四个字分开来解释:可:可以。重:再次。入:进入锁:同步锁进入什么:进入同步域(即同步代码块/方法或显式锁锁定的代码)一句话:一个线程中的.原创 2021-01-25 20:46:34 · 273 阅读 · 0 评论 -
11_死锁编码及快速定位
概念死锁是指两个或多个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象,若无外力干涉那他们都将无法推进下去。如果资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。产生死锁的原因系统资源不足进程运行推进的顺序不对资源分配不当死锁产生的四个必要条件互斥解决方法:把互斥的共享资源封装成可同时访问占有且等待解决方法:进程请求资源时,要求它不占有任何其它资源,也就是它必须一次性申请到所有的资源,这种方式会导致资源效率低。原创 2020-11-14 10:26:18 · 226 阅读 · 0 评论 -
10_线程池
前言获取多线程的方法,我们都知道有三种,还有一种是实现 Callable 接口实现 Runnable 接口实现 Callable 接口实例化 Thread 类使用 线程池 获取Callable 接口Callable 接口,是一种让线程执行完成后,[ 能够返回结果的 ]在说到 Callable 接口的时候,我们不得不提到 Runnable 接口 [ 两种写法 ]/** * 实现Runnable接口 */class MyThread implements Runnable {原创 2020-11-14 09:48:29 · 408 阅读 · 1 评论 -
9_Synchronized 和 Lock 的区别与好处
前言早期的时候我们解决 [ 生产者消费者问题 ] 对线程的主要操作为:synchronized ???? [ wait ] [ notify / notifyAll ]然后后面出现了替代方案lock ???? [ await ] [ singal / singalAll ]问题synchronized 和 lock 有什么区别?用新的 lock 有什么好处?举例说明1)synchronized 属于JVM 层面,属于 java 的关键字monitorent原创 2020-11-13 15:38:57 · 251 阅读 · 0 评论 -
8_ 阻塞队列
概念队列队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 [ FIFO ]阻塞队列BlockingQueue 阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:线程1 通过 Put 往阻塞队列中添加元素,而线程 2 通过 Take 从阻塞队列中移除元素:当阻塞队列是空时,从队列中获取元素的操作将会被阻塞当阻塞队列是满时,从队列中添加元素的操作将会被阻塞[ 类比 1 ]:当蛋糕店的柜子空的时候,无法从柜子里面获取蛋糕当蛋糕店的柜子满原创 2020-11-13 15:13:57 · 239 阅读 · 0 评论 -
7_CountDownLatch_CyclicBarrier_Semaphore 使用
CountDownLatch概念让一些线程阻塞直到另一些线程完成一系列操作才被唤醒CountDownLatch 主要有两个方法,当一个或多个线程调用await 方法时,调用线程就会被阻塞。其它线程调用 CountDown 方法会将计数器减 1(调用 CountDown 方法的线程不会被阻塞),当计数器的值变成零时,因调用 await 方法被阻塞的线程会被唤醒,继续执行 。场景:班长关门现在有这样一个场景,假设一个自习室里有7个人,其中有一个是班长,班长的主要职责就是在其它6个同学走了后,关灯,锁教原创 2020-11-12 20:36:52 · 209 阅读 · 0 评论 -
6_Java 的锁
Java 锁之 公平锁 和 非公平锁概念公平锁是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列非公平锁是指多个线程获取锁的顺序,并不是按照申请锁的顺序 [ 随机抢占 ],有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程(也就是某个线程一直得不到锁)如何创建synchronized 只能是非公平锁 。并发包中 ReentrantLock 的创建可以指定析构函数的 boolean 类型来得到公平锁或者原创 2020-11-12 19:35:28 · 234 阅读 · 0 评论 -
5_TransferValue 是什么
值传递和引用传递案列class Person { private Integer id; private String personName; public Person(String personName) { this.personName = personName; }}public class TransferValueDemo { public void changeValue1(int age) { age =原创 2020-11-12 18:35:20 · 237 阅读 · 0 评论 -
4_ Collection 线程不安全的举例
单线程环境下单线程环境的 ArrayList 是不会有问题的public class ArrayListNotSafeDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); for(S原创 2020-11-12 18:21:04 · 220 阅读 · 0 评论 -
3_谈谈原子类的ABA问题
原子类 AtomicInteger 的ABA问题连环套路从 AtomicInteger 引出下面的问题:CAS -> Unsafe -> CAS 底层思想 -> ABA -> 原子引用更新 -> 如何规避 ABA 问题ABA 问题是什么假设现在有两个线程,分别是 T1 和 T2,然后 T1 执行某个操作的时间为10 秒,T2 执行某个时间的操作是 2 秒,最开始 AB 两个线程,分别从主内存中获取 A 值,但是因为 B 的执行速度更快,他先把A的值改成B,然后在修改原创 2020-11-12 17:44:57 · 467 阅读 · 1 评论 -
2_CAS 底层原理
概念CAS 的全称是 Compare-And-Swap,它是 CPU 并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS 并发原语体现在 Java 语言中就是 sun.misc.Unsafe 类的各个方法。调用UnSafe 类中的 CAS 方法,JVM 会帮我们实现出 CAS 汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于 CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语原创 2020-11-12 17:19:08 · 309 阅读 · 0 评论 -
1_谈谈Volatile
????来源 Bilibili 尚硅谷周阳老师学习视频:尚硅谷Java大厂面试题第二季1_Volatile 和 JMM 内存模型的可见性JUC(java.util.concurrent)进程和线程进程:后台运行的程序(我们打开的一个软件,就是进程)线程:轻量级的进程,并且一个进程包含多个线程(同在一个软件内,同时运行窗口,就是线程)并发和并行并发:同时访问某个东西,就是并发并行:一起做某些事情,就是并行JUC 下的三个包java.util.concurrent原创 2020-11-11 22:57:50 · 658 阅读 · 0 评论