随笔分类 -  并发

摘要:身处其外辩证思考 disruptor:破坏者,分裂者 参考:https://ifeve.com/disruptor/ 1、性能极强的异步消息处理框架。线程间通信高效低延时的内存消息组件。LMAX架构可以获得每秒600万订单,1微秒的延迟获得吞吐量为100K+。(log4j、ActiveMQ中扩展使用 阅读全文
posted @ 2020-04-20 18:30 陈标 阅读(1090) 评论(0) 推荐(0)
摘要:ThreadPoolExecutor类的参数详解: Executors:使用该工具类,创建的线程池,会使用默认的方式创建,此时却是了很多的灵活性。比如说:线程的队列,线程的丢弃……等。 ThreadFactory:创建线程时,设置相应的属性。比如线程名字…… 阅读全文
posted @ 2019-08-18 23:03 陈标 阅读(114) 评论(0) 推荐(0)
摘要:同步容器和并发容器: Vector 线程安全,在方法上加Synchronized ArrayList Collections 工具类 Hashtable 线程安全,在方法上加Synchronized HashMap 并发容器: CopyOnWriteArrayList:当写的时候,就复制。 缺点: 阅读全文
posted @ 2019-08-18 19:59 陈标 阅读(184) 评论(0) 推荐(0)
摘要:Future : 提前完成任务 原理:wait(),notify()的使用。 线程之间的通信 : CountDownLatch :线程计数 CyclicBarrier :循环计数 Semaphore : 信号量,比如有100个线程,但是只有10个信号量,那么就每个批次执行10个,“批次”。 Exch 阅读全文
posted @ 2019-08-18 17:05 陈标 阅读(221) 评论(0) 推荐(0)
摘要:condition 的作用:条件锁 需求: 按需执行三个线程。 用wait,notify的方式: 缺点: notifyAll,会唤醒所有等待的线程,不能指定特定线程的唤醒。此时就引入了condition 用condition的方式来实现: 阅读全文
posted @ 2019-08-18 00:09 陈标 阅读(629) 评论(0) 推荐(0)
摘要:重点: 1、读锁共享 2、写锁互斥 3、读写锁互斥 锁降级:将写锁降级为读锁。(先获取写锁,再获取读锁,再释放写锁,最后释放读锁) 造成锁降级的原因:出于性能考虑,一般情况下,都将锁定的动作,精确到具体的语句块,在两个锁的语句块之间,有可能线程的交替执行,造成线程安全问题。 解决的方法: 1、将锁的 阅读全文
posted @ 2019-08-17 00:06 陈标 阅读(235) 评论(0) 推荐(0)
摘要:何为公平锁: 线程的运行,根据线程的提交(start() 方法的调用时间点),依次执行。 公平锁实现的原理: 1、使用链表来维护数据。(方便获取头节点) 2、当一个线程过来,就创建一个节点,节点中存放的内容为,wait()的对象。 3、当上一个线程结束,则获取头节点,获取节点中存放的对象,调用对象的 阅读全文
posted @ 2019-08-16 07:53 陈标 阅读(257) 评论(0) 推荐(0)
摘要:AbstractQueuedSynchronizer 是一个锁框架。实现的原理(大概): 1、关于重入锁方面的实现,参考(手写一个可重入锁)。 2、关于公平锁方面的实现,使用双链表的形式,进行公平锁的排队。怎么用: 详见AbstractQueuedSynchronizer的api,或者参考:Reen 阅读全文
posted @ 2019-08-16 06:34 陈标 阅读(109) 评论(0) 推荐(0)
摘要:基于的原理: 1、synchronized 2、wait,notify方法的搭配使用 代码示例如下: 阅读全文
posted @ 2019-08-16 05:19 陈标 阅读(380) 评论(0) 推荐(0)
摘要:从语义方面解析为什么需要锁: 1、wait()方法会释放锁,如果没有先获得锁,那么如何释放? 从实际的作用: 为了预防饥饿线程的产生。 原因: 现在考虑, 如果wait() 和 notify() 的操作没有相应的同步机制, 则会发生如下情况 【线程A】 进入了 while 循环后(通过了 !cond 阅读全文
posted @ 2019-08-16 04:19 陈标 阅读(2485) 评论(0) 推荐(0)
摘要:问题: 1、线程的中断方式。 2、为什么中断阻塞中的线程,会抛出异常。 代码示例: 解答问题: 1、线程的中断,使用设置中断标示的方式进行。 2、中断阻塞中的线程抛出异常,是为了不让线程无休止的中断。因为设置中断标示,线程并不会马上停止,还需要等待下一次的CPU时间片到来,才能根据interrupt 阅读全文
posted @ 2019-08-16 04:18 陈标 阅读(2947) 评论(0) 推荐(0)
摘要:并发 活跃性问题: 1、死锁:线程A,B各种拥有一个加锁的资源,同时争抢对方的资源。 2、饥饿:某些线程得不到运行。(线程优先级) 3、活锁:线程A,B相让,都不去执行。 饥饿产生的情况: 1、线程优先级。(需要考虑系统的差异性) 2、线程A,B执行同一个同步块;线程A阻塞,线程B在等待A释放锁。 阅读全文
posted @ 2019-08-16 04:17 陈标 阅读(160) 评论(0) 推荐(0)