多线程
JiuYeHui2008
这个作者很懒,什么都没留下…
展开
-
分布式之MQ复习精讲
为什么写这篇文章?博主有两位朋友分别是小A和小B:1.小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。2.小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点...原创 2018-07-27 16:32:18 · 150 阅读 · 0 评论 -
对高并发流量控制的一点思考
前言:在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,主要就是自己对高并发流量控制的一点思考。应对大流量的一些思路首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性...转载 2018-07-24 15:48:18 · 307 阅读 · 0 评论 -
活跃性(死锁、饥饿、活锁)
锁顺序死锁我们知道,加锁是为了保证线程安全性而做的同步操作,而过度的加锁可能导致各个线程彼此依赖别的线程已经持有的锁。先上一段代码瞅瞅:public class DeadLockDemo { public static void main(String[] args) { Object lock1 = new Object(); Object lock2 = ne...原创 2018-07-05 16:54:55 · 2722 阅读 · 2 评论 -
线程间通信(上) 之wait/notify机制
线程间通信如果一个线程从头到尾执行完也不和别的线程打交道的话,那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势,一个大任务拆成若干个小任务之后,各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程在执行过程中可以相互通信,所谓通信就是指相互交换一些数据或者发送一些控制指令,比如一个线程给另一个暂停执行的线程发送一个恢复执行的指令,下边详细看都有哪些通信方式。volat...原创 2018-07-05 16:46:38 · 271 阅读 · 0 评论 -
设计线程安全的类
设计线程安全的类前边我们对线程安全性的分析都停留在一两个可变共享变量的基础上,真实并发程序中可变共享变量会非常多,在出现安全性问题的时候很难准确定位是哪块儿出了问题,而且修复问题的难度也会随着程序规模的扩大而提升(因为在程序的各个位置都可以随便使用可变共享变量,每个操作都可能导致安全性问题的发生)。比方说我们设计了一个这样的类:public class Increment { private...原创 2018-07-05 16:44:29 · 342 阅读 · 0 评论 -
java并发编程之原子性操作
线程风险上头一直在说以线程为基础的并发编程的好处了,什么提高处理器利用率啦,简化编程模型啦。但是砖家们还是认为并发编程是程序开发中最不可捉摸、最诡异、最扯犊子、最麻烦、最恶心、最心烦、最容易出错、最不符合社会主义核心价值观的一个部分~ 造成这么多最的原因其实很简单:进程中的各种资源,比如内存和I/O,在代码里以变量的形式展现,而某些变量在多线程间是共享、可变的,共享意味着这个变量可以被多个线程同时...原创 2018-07-05 16:43:26 · 7892 阅读 · 4 评论 -
Java 虚拟机对锁优化所做的努力
1、 锁偏向锁偏向是一种针对加锁操作的优化手段。如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样就节省了大量有关锁申请的操作,从而提高了程序性能。因此,对于几乎没有锁竞争的场合,偏向锁有比较红啊的优化效果,因为连续多次极有可能是同一个线程请求相同的锁。而对于锁竞争比较激烈的场合,其效果不佳。因为在竞争激烈的场合,最有可能的情况是每次都是不同...原创 2018-08-15 10:34:05 · 147 阅读 · 0 评论