
juc
文章平均质量分 76
半旧518
java全栈长跑型选手,csdn内容合伙人,阿里云社区专家博主,腾讯云创作之星
展开
-
【百面成神】多线程基础16问,你能坚持到第几问
多线程最核心、基础、高频的16问原创 2023-03-22 11:20:27 · 1609 阅读 · 1 评论 -
Juc并发编程16——Semaphore,Exchanger,Fork/Join框架
本文主要介绍常用的并发工具类:Semaphore,Exchanger,Fork/Join框架,讲解其使用与原理原创 2022-06-15 12:31:30 · 627 阅读 · 86 评论 -
Juc并发编程15——循环屏障CyclickBarrier使用与源码剖析
如果打一场游戏,必须等待游戏的玩家足够以后才开始,并且为了公平,所有玩家必须同时进入游戏。循环屏障就是为了解决这种场景而设计的原创 2022-06-15 00:04:58 · 1008 阅读 · 25 评论 -
Juc并发编程14——线程计数器CountdownLatch源码剖析
CountdownLatch,多任务同步神器,它允许一个或多个线程,等待其它线程完成工作,本文讲解其使用与源码原创 2022-06-14 08:10:26 · 739 阅读 · 47 评论 -
Juc并发编程13——如何实现一个线程池?(万字源码剖析)
前面我们已经介绍过线程池的使用了,下面我们来深挖它的实现原理,其原理比较复杂,准备好,发车。先介绍下原创 2022-06-12 14:06:11 · 710 阅读 · 82 评论 -
Juc并发编程12——2万字深入源码:线程池这篇真的讲解的透透的了
本文将介绍常见的线程池的使用方法,并深入源码进行剖析其具体的底层实现方法。原创 2022-05-20 18:05:55 · 2217 阅读 · 138 评论 -
Juc并发编程11——深入源码:常用并发容器、阻塞队列使用与原理
前言本文将介绍常用的并发容器,比较传统容器与并发容器的区别,介绍并发容器的基本原理。是面试常考、工作常用的热门知识点。原创 2022-05-11 23:37:59 · 848 阅读 · 68 评论 -
Juc并发编程10——原子类与ABA问题解决方案
除了加锁以外,还可以使用原子类实现操作原子性。它底层采用CAS算法,使用简单、性能高效、线程安全。原创 2022-04-28 07:55:04 · 651 阅读 · 18 评论 -
Juc并发编程09——自己动手实现排他锁
我们已经了解了AQS的的基本原理了,不如自己仿照其它锁实现一个排他锁吧。要求如下:同一时间只允许一个线程持有锁,不要求可重入(反复加锁直接忽视即可)。(1)实现Lock接口public class Demo23 { public static void main(String[] args) { } private static class myLock implements Lock{ @Override public void lock原创 2022-04-24 21:34:18 · 330 阅读 · 2 评论 -
Juc并发编程08——Condition实现源码分析
看看ReentrantLock中的newCondition方法final ConditionObject newCondition() { return new ConditionObject();}再点进去发现原来就是AQS中的内部类。 public class ConditionObject implements Condition, java.io.Serializable { private static final long serialVersionUID原创 2022-04-22 22:22:34 · 725 阅读 · 0 评论 -
Juc并发编程07——公平锁真的公平吗(源码剖析)
先来回顾下公平锁的tryAcquire代码。 protected final boolean tryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (!hasQueuedPredecessors() && //注意这原创 2022-04-22 07:33:17 · 712 阅读 · 1 评论 -
Juc并发编程06——深入剖析队列同步器AQS源码
手把手AQS、CAS源码剖析原创 2022-04-21 22:34:37 · 672 阅读 · 0 评论 -
juc并发编程05——读写锁
可重入锁是一种排他锁,同一时间只允许一个线程操作竞争资源。读写锁是针对读、写场景设计的,允许多个线程同时持有锁。读写锁维护了一个读锁和一个写锁。其机制如下:没有其它线程占用写锁的情况下,同一时间可以有多个线程加读锁。没有任意线程占用读锁的情况下, 同一时间只有一个线程可以加写锁。简单总结就是要么读,要么写,允许多个线程同时读,只允许一个线程单独写。看看源码。public interface ReadWriteLock { Lock readLock(); Lock w原创 2022-04-15 06:53:43 · 347 阅读 · 2 评论 -
Juc并发编程04——可重入锁、公平锁与非公平锁
1.ReentrantLock使用介绍之前我们一直使用的Lock实例都用的是ReentrantLock,实际上,这是一种可重入锁。简单来说,就是对同一个线程可以进行多次的加锁操作。public class Demo11 { public static void main(String[] args) { Lock lock = new ReentrantLock(); lock.lock(); lock.lock(); new Th原创 2022-04-13 22:18:06 · 369 阅读 · 0 评论 -
juc并发编程03——Lock与Condition接口
前面两篇文章回顾了传统的synchronized关键字、JMM内存模型、volitile关键字,这篇文章开始我们正式介绍juc包。1.Lock与Condition接口在jdk5之后,juc提供了Lock,与synchronized相似,都可以实现锁功能,但是需要手动获取锁和释放锁。不过它与synchronized又不太一样,synchronized关键字相当于是使用的其它类的monitor关联,在mark word中记录锁的信息。而Lock则可以认为是一个锁对象。看看Lock源码的方法。public原创 2022-04-13 20:32:34 · 273 阅读 · 0 评论 -
juc并发编程02——JMM模型
我们在这篇文章中将介绍JMM模型,也就是java内存模型。注意,本文所提到的JMM模型与JVM内存模型属于不同层次的内容。JVM内存模型讲的是物理内存空间的分配,而JMM则强调对于JVM内存模型的抽象。1.java内存模型在计算机中,为了解决主内存的速度跟不上处理器速度的问题,我们给每个处理器添加一级或多级高速缓存(如下图)。但是,每个处理器上缓存的数据如何保证一致性呢?为了实现缓存数据的一致性,我们计算机中使用了缓存一致性协议。java中也有类似的机制来实现多线程的数据模型。java的内存模型规定原创 2022-04-11 22:17:15 · 852 阅读 · 1 评论 -
JUC并发编程01——谈谈锁机制:轻量级锁、重量级锁、偏向锁、锁消除与锁优化
1.为什么要有并发编程计算机的cpu与I/O的效率并不是完全一致的,CPU的处理速度快时,在进行I/O操作时,可能会导致CPU空闲的状态,为了最打程度的利用cpu的资源,开发人员创造了并发编程,进程通过轮换可以最大程度的利用cpu的资源,同时给用户进程在同步执行的错觉。但是进程之间并不会共享数据,同时上下文的切换也比较耗时,线程横空出世,同一个进程中的不同线程之间内存共享一片内存区域,线程上下文切换也很轻量级。juc是java官方提供的线程操作的jar包,可以尽可能的降低我们并发编程的难度。2.锁机制原创 2022-04-08 22:20:19 · 845 阅读 · 4 评论