多线程
文章平均质量分 66
码厚炮
这个作者很懒,什么都没留下…
展开
-
使用AtomicReference自己实现锁
主题思想:利用AtomicReference自带的CAS机制,实现类似于ReentrantLock的锁,当前线程进入时,CAS验证是否有其他线程持有锁,为null则让当前线程持有,不为null,线程自旋。解锁同理将持有线程置为NULL即可。 package com.zcy.controller; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomi原创 2021-04-23 14:14:20 · 205 阅读 · 0 评论 -
进程间的几种通信方式
1. 管道 ps -ef|grep mysql Linux 命令中的「|」这个竖线就是一个管道。 写入的数据都是缓存在内核中,另一个进程读取数据时候自然也是从内核中获取,同时通信数据都遵循先进先出原则, 管道这种通信方式效率低,不适合进程间频繁地交换数据 2.消息队列 (1) 消息队列不适合比较大数据的传输,因为在内核中每个消息体都有一个最大长度的限制 (2) 消息队列通信过程中,存在用户态与内核态之间的数据拷贝开销,因为进程写入数据到内核中的消息队列时,会发生从用户态拷贝数据到内核态的过程,同理另一进程.原创 2021-03-24 09:58:25 · 553 阅读 · 2 评论 -
多线程的ThreadLocal、ReentrantLock、volatile、Synchronized
ThreadLocal:ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,防止自己的变量被其它线程篡改。 Spring框架里面就是用的ThreadLocal来实现这种隔离,主要是在TransactionSynchronizationManager这个类里面 简单原理:每个线程Thread都维护了自己的threadLocals变量,所以在每个线程创建ThreadLocal的时候,实际上数据是存在自己线程Thread的thread..原创 2021-03-16 11:00:50 · 276 阅读 · 1 评论 -
JUC包--BlockingQueue的使用样例
JUC包–BlockingQueue的使用样例 系统中有业务需要实现队列,引入中间件又没有太大必要,因此直接使用jdk自带的类,之前也未使用过,因此将使用的类记录下,以供后边当工具类使用。在新增的Concurrent包中,BlockingQueue(就是个队列而已)很好的解决了多线程中数据的安全问题。 线程操作类 @Component @Slf4j public class FlowQueue implements Runnable { private final Bl原创 2020-10-19 10:00:56 · 9377 阅读 · 0 评论