随笔分类 - JUC
Java并发编程
发表于 2022-07-17 00:18阅读:48评论:0推荐:0
摘要:被volatile修改的变量有2大特点 特点 可以保证 可见性 有序性 还是那张图,volatile只能保证可见性和有序性 那为什么volatile可以实现这些功能呢? 底层就是内存屏障 (面试必问) volatile的内存语义 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享
阅读全文 »
发表于 2022-07-16 23:12阅读:186评论:0推荐:0
摘要:1、线程池状态: 五种状态: 1、RUNNING 状态说明:在RUNNING状态下,线程池可以接收新的任务和执行已添加的任务。线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建(比如调用Executors.newFixedThreadPool()或者使用ThreadPoolExecut
阅读全文 »
发表于 2022-07-16 23:09阅读:99评论:0推荐:0
摘要:Future和Callable接口 Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。(异步:可以被叫停,可以被取消) 一句话:Future接口可以为主线程开一个分支任务,专门为主线程处
阅读全文 »
发表于 2022-07-16 23:06阅读:23评论:0推荐:0
摘要:并发相关Java包 涉及到的包内容 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks JUC包创始人 Doug Lea start线程解读 初始程序 public static void main(
阅读全文 »
发表于 2021-08-22 16:34阅读:231评论:0推荐:0
摘要:文章转自于技术人成长之路:https://mp.weixin.qq.com/s/Xl5X30dbIYKE-1lB9NuXAw Concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们对并发编程的掌握更加透彻也会大大提升
阅读全文 »
发表于 2021-03-16 00:14阅读:71评论:0推荐:0
摘要:AQS的作用: AQS 是一个用于构建锁、同步器等线程协作工具类的框架,有了 AQS 以后,很多用于线程协作的工具类就都可以很方便的被写出来,可以让更上层的开发极大的减少工作量,避免重复造轮子,同时也避免了上层因处理不当而导致的线程安全问题,因为 AQS 把这些事情都做好了。总之,有了 AQS 之后
阅读全文 »
发表于 2021-03-10 23:29阅读:106评论:1推荐:1
摘要:volatile 原理 volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence) 对 volatile 变量的写指令后会加入写屏障 对 volatile 变量的读指令前会加入读屏障 如何保证可见性 写屏障(sfence)保证在该屏障之前的,对共享变量的改动
阅读全文 »
发表于 2021-03-10 00:14阅读:227评论:1推荐:0
摘要:深入解析synchronized 1 常见的几个并发问题 1.可见性问题 案例演示:一个线程根据boolean类型的标记flag, while循环,另一个线程改变这个flag变量的值,另一个线程并不会停止循环。 /** * @author WGR * @create 2020/12/22 -- 20
阅读全文 »
发表于 2021-03-08 23:35阅读:116评论:2推荐:1
摘要:相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量,即对与不满足条件的线程可以放到不同的集合中等待 与 synchronized 一样,都支持可重入 基本语法 // 获取锁 reentrantLock.lock(); try { // 临界
阅读全文 »
发表于 2021-02-21 21:46阅读:55评论:0推荐:0
摘要:线程状态转换 RUNNABLE ←-> WAITING 线程用synchronized(obj)获取了对象锁后 调用obj.wait()方法时,t 线程从RUNNABLE --> WAITING 调用obj.notify(),obj.notifyAll(),t.interrupt()时 竞争锁成功,
阅读全文 »
发表于 2021-02-13 23:07阅读:135评论:0推荐:0
摘要:wait notify 原理 Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒 WAITING 线程会在
阅读全文 »
发表于 2021-02-09 15:46阅读:92评论:0推荐:0
摘要:轻量级锁在没有竞争时(就自己这个线程),每次重入仍然需要执行 CAS 操作。Java 6 中引入了偏向锁来做进一步优化:只有第一次使用 CAS 将线程 ID 设置到对象的 Mark Word 头,之后发现这个线程 ID 是自己的就表示没有竞争,不用重新 CAS。以后只要不发生竞争,这个对象就归该线程
阅读全文 »
发表于 2021-02-03 00:33阅读:158评论:0推荐:0
摘要:死锁是什么?有什么危害? 发生在并发中 首先你要知道,死锁一定发生在并发场景中。我们为了保证线程安全,有时会给程序使用各种能保证并发安全的工具,尤其是锁,但是如果在使用过程中处理不得当,就有可能会导致发生死锁的情况。 互不相让 死锁是一种状态,当两个(或多个)线程(或进程)相互持有对方所需要的资源,
阅读全文 »
发表于 2021-01-22 22:28阅读:252评论:0推荐:0
摘要:文章转自于:https://www.cnblogs.com/dalianpai/p/14245412.html CAS 简介 首先我们来看一下 CAS 是什么,它的英文全称是 Compare-And-Swap,中文叫做“比较并交换”,它是一种思想、一种算法。 在多线程的情况下,各个代码的执行顺序是不
阅读全文 »