![](https://img-blog.csdnimg.cn/16856edc16694cc2a8b9ba621f18cd28.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【并发相关】
文章平均质量分 82
并发相关知识
我是小酒
架构师,资深Java开发工程师,AI爱好者。合作请私信
展开
-
如何解决多线程卡死问题?四招教你轻松应对!
多线程大家都用过,可以让一个程序同时执行多个任务,提高效率和性能,一个人干的慢,三个人干。但是,多线程也带来了一些问题和挑战,比如等问题,三个人抢一碗米饭,没有个规矩肯定要打架的。这里我介绍一种可能出现的多线程问题:如果一个线程在执行过程中一直卡住,线程不释放最终导致线程耗尽怎么办。这是前一阶段对接外部系统时遇到的一个问题,对方提供了个SDK,我们集成后用他们的netty的方式建立连接,推送相关数据,但是呢这个推送不能阻塞业务,所以我们采用异步推送,搞了个线程池,随取随还,如图后来就发现有一个。原创 2023-06-26 20:10:12 · 4985 阅读 · 0 评论 -
AbstractQueueSynchronizer简称AQS的理解
我是一个使者,不为所斩,但求已知AbstractQueueSynchronizer,抽象的队列式同步器, 简称 AQS,一般用于支持其他框架,在多线程中常用工作原理: 把所有请求线程构成一个CLH队列,当一个线程执行完毕lock.unlock时会激活自己后续节点,正在执行的线程不在队列中,等待执行的线程全部处于阻塞状态比如ReentrantLock,先通过CAS尝试获取锁。如果此时已经有线程占据了锁,那就加入CLH队列 队尾并且被挂起 自旋。当锁被释放之后,排在CLH队列队首的线程会被唤醒,.原创 2021-02-24 17:09:57 · 130 阅读 · 0 评论 -
关于线程安全的小测试
起100个线程 + 1,循环100次查看结果,正常来说应该是100对吧public static int t = 0; public static void main(String[] args) throws InterruptedException { for (int i=0;i<100;i++){ for (int j=0;j<100;j++){ new Thread(new Runnable()...原创 2020-05-17 20:00:30 · 360 阅读 · 0 评论 -
java多线程的简单应用
最近在做推送相关的模块,在群推时发现添加log效率比较低,特别是批量update操作,所以使用异步操作log比较好建一个类AsynPushRecord,写从初始化方法设置线程基础参数@PostConstruct public void init() { BlockingQueue<Runnable> taskQueue = new ArrayBlock...原创 2019-03-03 13:06:46 · 300 阅读 · 0 评论 -
volatile实践,必须弄懂它!
说volatile之前先要了解主内存,工作内存,对于多线程来说,注意三个特性:1.原子性,2.有序性,3.可见性,这里不讲述volatile规则: 1.保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2.行指令重排序。 3.保证有序性,可见性,不保证原子性使用volatile关键字会强制将修改的...原创 2019-04-29 00:10:56 · 332 阅读 · 0 评论