随笔分类 -  并发编程

并发编程面试题
摘要:在 java 中守护线程和本地线程区别 用户线程是程序创建的线程。 由jvm创建的线程是守护线程,比方说垃圾收集线程。 死锁与活锁的区别 ,死锁与饥饿的区别? 死锁 :是指两个或两个以上的进程( 或线程)在执行过程中 , 因争夺资源而造成的一种互相等待的现象 ,若无外力作用 , 它们都将无法推进下去 阅读全文

posted @ 2024-09-26 15:58 ~码铃薯~ 阅读(24) 评论(0) 推荐(0) 编辑

synchronized(面试有被问到)
摘要:synchronized synchronized底层是如何实现的 以及 什么是锁的升级和降级? synchronized是java内建的一种同步机制,当一个线程已经获取到锁了,其他的线程试图获取锁的时候就只能等待或者阻塞在那里。synchronized可以用来修饰方法也可以用来修饰代码块。 syn 阅读全文

posted @ 2024-09-08 14:56 ~码铃薯~ 阅读(43) 评论(0) 推荐(0) 编辑

常见并发工具类的使用场景
摘要:常见并发工具类的使用场景 ReentrantLock ReentrantLock是一种可重入的独占锁,它允许同一个线程多次获取同一把锁而不会被阻塞。它的功能类似于synchronized是一种互斥锁,可以保证线程安全。 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchro 阅读全文

posted @ 2024-09-08 11:58 ~码铃薯~ 阅读(27) 评论(0) 推荐(0) 编辑

tryLock 和Lock 和 lockinterruptibly 的区別
摘要:tryLock 和Lock 和 lockinterruptibly 的区別 1.tryLock 能获得锁就返回 true,不能就立即返回 false,tryLock(longtimeout,TimeUnit unit),可以增加时间限制,如果超过该时间段还没获得锁,返回 false 2lock能获得 阅读全文

posted @ 2024-09-08 09:13 ~码铃薯~ 阅读(51) 评论(0) 推荐(0) 编辑

锁的分类
摘要:锁的分类: 悲观锁和乐观锁:乐观锁和悲观锁是并发控制的一种机制,用于多线程或多进程环境下对共享资源的访问管理,以防止数据不一致或竞态条件。它们的主要区别在于对待冲突的策略。 悲观锁是一种对资源持有较悲观态度的锁定方式。它假设数据在并发访问时极有可能发生冲突,因此每次访问数据时都会先加锁,以确保其他线 阅读全文

posted @ 2024-09-07 17:15 ~码铃薯~ 阅读(28) 评论(0) 推荐(0) 编辑

ConcurrentHashMap源码剖析
摘要:ConcurrentHashMap源码剖析 https://www.bilibili.com/video/BV1Qg41197FG/?spm_id_from=333.337.search-card.all.click&vd_source=273847a809b909b44923e3af1a7ef0b 阅读全文

posted @ 2024-09-03 13:59 ~码铃薯~ 阅读(20) 评论(0) 推荐(0) 编辑

并发容器中的各种队列 ArrayBlockingQueue**源码剖析
摘要:并发容器中的各种队列 ArrayBlockingQueue:数组阻塞队列 LinkendBlockingQueue: 链表阻塞队列 LinkedBlockingDeque: 链表阻塞双端队列 LinkedTransferQueue: 链表阻塞传输队列 SynchronousQueue: 没有缓冲的阻 阅读全文

posted @ 2024-09-02 19:20 ~码铃薯~ 阅读(8) 评论(0) 推荐(0) 编辑

Semaphore源码剖析
摘要:Semaphore源码剖析 Semaphore从英⽂单词上翻译是:信号量,可以理解 他是⼀个 许可证。只有获取到 许可证 的线程,才能执⾏相应逻辑,同时拿⾛ 许可证,⽽那些没有获取到的线程 只能等待。当持有 许可证 的线程 执⾏完成 后,需要 归还 许可证, 下⼀个线程 才可以 获取 许可证 执⾏相 阅读全文

posted @ 2024-09-02 17:05 ~码铃薯~ 阅读(8) 评论(0) 推荐(0) 编辑

CyclicBarrier源码介绍
摘要:CyclicBarrier源码介绍 循环栅栏, 他的特点是可以循环使⽤,当多个线程都到达同指定点时,再同进执⾏。 测试案例: public class CyclicBarrierDemo { public static void main(String[] args) { CyclicBarrier 阅读全文

posted @ 2024-09-02 15:51 ~码铃薯~ 阅读(12) 评论(0) 推荐(0) 编辑

CountDownLatch源码剖析
摘要:CountDownLatch 门闩,他可以让多个线程 都阻塞在⼀个地⽅,直到 所有线程任务都执⾏完成。 测试案例: 先让子线程执行完了,再让主线程执行 public class CountDownLatchDemo { public static void main(String[] args) { 阅读全文

posted @ 2024-09-02 14:46 ~码铃薯~ 阅读(14) 评论(0) 推荐(0) 编辑

ReentrantReadWriteLock源码剖析
摘要:ReentrantReadWriteLock源码剖析 synchronized和ReentrantLock都是互斥锁。 为什么要出现读写锁:如果说有一个操作是读多写少的,还要保证线程安全的话。如果采用上述的两种互斥锁,效率方面很 定是很低的。在这种情况下,咱们就可以使用ReentrantReadWr 阅读全文

posted @ 2024-09-01 14:20 ~码铃薯~ 阅读(3) 评论(0) 推荐(0) 编辑

ReentrantLock源码剖析
摘要:ReentrantLock源码剖析 测试案例: public class ReentrantLockDemo { // ReentrantLock lock = new ReentrantLock(); // 默认是非公平锁 // ReentrantLock lock = new Reentrant 阅读全文

posted @ 2024-09-01 13:32 ~码铃薯~ 阅读(3) 评论(0) 推荐(0) 编辑

ConditionObject源码剖析
摘要:ConditionObject源码剖析 这玩意是AQS的一个内部类。 案例演示: public class ReentrantLockConditionDemo { ReentrantLock lock = new ReentrantLock(); Condition condition = loc 阅读全文

posted @ 2024-09-01 10:43 ~码铃薯~ 阅读(5) 评论(0) 推荐(0) 编辑

CAS原理剖析
摘要:CAS原理剖析 compare and swap也就是比较和交换,他是一条CPU的并发原语。 他在替换内存的某个位置的值时,首先查看内存中的值与预期值是否一致,如果一致,执行替换操作。这个操作是一个原子性操作。 Java中基于Unsafe的类提供了对CAS的操作的方法,JVM会帮助我们将方法实现CA 阅读全文

posted @ 2024-08-31 17:17 ~码铃薯~ 阅读(8) 评论(0) 推荐(0) 编辑

AQS源码剖析
摘要:AQS源码剖析 AQS就是AbstractQueuedSynchronizer抽象类,AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,CountDownLatch,Semaphore,Cycli 阅读全文

posted @ 2024-08-31 16:46 ~码铃薯~ 阅读(7) 评论(0) 推荐(0) 编辑

ThreadPoolExecutor线程池源码剖析
摘要:ThreadPoolExecutor源码剖析 自定义构建线程池,可以细粒度的控制线程池,去管理内存的属性,并且针对一些参数的设置可能更好的在后期排查问题。这也是阿里巴巴开发手册推荐我们这样做的。 先看一下ThreadPoolExecutor提供的七个核心参数 public ThreadPoolExe 阅读全文

posted @ 2024-08-31 15:01 ~码铃薯~ 阅读(6) 评论(0) 推荐(0) 编辑

线程池ThreadPoolExecutor中RejectedExecutionHandler常见拒绝策略
摘要:JDK提供的几种拒绝策略(面试有被问到): AbortPolicy:当前拒绝策略会在无法处理任务时,直接抛出一个异常。 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecut 阅读全文

posted @ 2024-08-31 09:23 ~码铃薯~ 阅读(117) 评论(0) 推荐(0) 编辑

ABA问题
摘要:ABA问题:这个是CAS常见的一个问题。是指在使用cas锁的时候,由于cas算法实现一个重要前提需要取出内存中某时刻的数据,而在下一个时刻进行比较并替换,也就是说在这个时间差内,另外一个线程的手速比较快,他将这个值从原来的A改成了B又改成了A,这个时候原来的线程一看还是原来的A,就认为这个变量的值没 阅读全文

posted @ 2024-08-12 18:54 ~码铃薯~ 阅读(19) 评论(0) 推荐(0) 编辑

ArrayBlockingQueue使用
摘要:package org.example; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; /** * 用数组实现的阻塞队列 */ public cla 阅读全文

posted @ 2024-02-01 19:48 ~码铃薯~ 阅读(12) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示