• 【死磕Java并发】-----J.U.C之读写锁:ReentrantReadWriteLock

    时间:2022-09-21 10:14:15

    此篇博客所有源码均来自JDK 1.8 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致性能降低。所以就提供了读...

  • 【死磕Java并发】-----J.U.C之AQS:CLH同步队列

    时间:2022-09-21 10:14:03

    此篇博客所有源码均来自JDK 1.8 在上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。 CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS...

  • 【死磕Java并发】—–深入分析volatile的实现原理

    时间:2022-06-01 21:41:09

    通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对vo...

  • 【死磕Java并发】-----深入分析volatile的实现原理

    时间:2022-06-01 21:41:03

     通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对v...

  • 【死磕Java并发】-----Java内存模型之重排序

    时间:2021-09-11 00:44:25

    在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-before...

  • 【死磕Java并发】-----Java内存模型之happend-before

    时间:2021-09-11 00:44:31

    在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,...

  • 【死磕Java并发】-----J.U.C之AQS:CLH同步队列

    时间:2021-09-11 00:44:19

    此篇博客全部源代码均来自JDK1.8在上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简单介绍中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。CLH同步队列是一个FIFO双向队列,AQS依赖它来完毕同步状态的管理,当前线程假设获取同步状态失败时,AQS则会将当前线程已经...

  • 【死磕Java并发】-----Java内存模型之happens-before

    时间:2021-09-11 00:44:13

    在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,...

  • 【死磕Java并发】-----深入分析synchronized的实现原理

    时间:2021-09-11 00:44:07

    记得刚刚開始学习Java的时候。一遇到多线程情况就是synchronized。相对于当时的我们来说synchronized是这么的奇妙而又强大,那个时候我们赋予它一个名字“同步”。也成为了我们解决多线程情况的百试不爽的良药。可是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对...

  • 【死磕Java并发】----- 死磕 Java 并发精品合集

    时间:2021-09-11 00:44:25

    【死磕Java并发】系列是LZ在2017年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。先来一个总览图:【高清图,请关注“Java技术驿站”公众号,回复:脑图JUC】【死磕Java并发】—–深入分析synchronized的实现原理synchronized可以保证方法或者...

  • 【死磕Java并发】—–J.U.C之AQS(一篇就够了)

    时间:2021-07-04 01:19:37

    [隐藏目录]1独占式1.1独占式同步状态获取1.2独占式获取响应中断1.3独占式超时获取1.4独占式同步状态释放2共享式2.1共享式同步状态获取2.2共享式同步状态释放3参考资料此篇博客所有源码均来自JDK1.8在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的...

  • 【死磕Java并发】-----内存模型之happens-before

    时间:2021-07-04 01:19:25

    在上篇博客(【死磕Java并发】-----深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程...