
java1.8 hash算fa优化 HashMap的数据结构:entry数组+链表/红黑树 一、根据key进行寻址(位运算) 二、解决hash冲突 三、扩容
使用 volatile 关键字 基于volatile实现线程之间的通信方式是:使用了共享内存的思想,主要是依赖于MESI协议。 使用Object的wait和notify ob...
高并发系统下的性能优化 主要思路有两种: 提高系统的处理核心数 减少单次任务的相应时间 怎么做到系统的高可用 高可用指的是:系统具备较高的无故障运行的能力。高可用的度量指标:...
一、es基本组成 elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的,核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。 ...
原文链接:https://www.cnblogs.com/stateis0/p/9062133.html推荐看原文,原文排版很清晰 1. 什么是 ZAB 协议? ZAB 协议...
AQS(同步器)是用来构建锁和其他同步组件的基础框架。它的实现主要是依赖一个int成员变量来标识同步状态和一个同步队列。同步器本身没有实现任何同步接口,仅仅是定义了几个pro...
场景:对账系统最近越来越慢,老板让优化,用户通过在线商城下单,会生成电子订单,保存在订单库;之后物流会生成派送单给用户发货,派送单保存在派送单库。为了防止漏派送或者重复派送,...
StampedLock Java在1.8这个版本里,提供了一种叫StampedLock的锁,它的性能就比读写锁还要好。 StampedLock支持的三种锁模式 ReadWri...
ReadWriteLock 适用于读多写少的场景,针对读多写少这种并发场景,Java SDK并发包提供了读写锁——ReadWriteLock,非常容易使用,并且性能很好。 读...
Semaphore(信号量) 信号量可以简单的概括为:一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来...
创建多少线程合适? 多线程本质上是提升多核CPU的利用率,所以根据使用情况分为:计算密集型、io密集型。 一个通用公式(仅供参考): I/O密集型: 最佳线程数=1 +(I/...
通用的线程生命周期 初始状态 指的是线程已经被创建,但是还不允许分配CPU执行。这个状态属于编程语言特有的,不过这里所谓的被创建,仅仅是在编程语言层面被创建,而在操作系统层面...
什么是管程 Java采用的是管程技术,synchronized关键字及wait()、notify()、notifyAll()这三个方法都是管程的组成部分。管程和信号量是等价的...
并发编程是一个复杂的技术领域,微观上涉及到原子性问题、可见性问题和有序性问题,宏观则表现为安全性、活跃性以及性能问题 在设计并发程序的时候,主要是从宏观出发: 安全性方面要注...
案例场景 例如账户A 转账户B、账户C 转账户D这两个转账操作。 这种方式采用了细粒度锁。使用细粒度锁可以提高并行度,是性能优化的一个重要手段。 但是会出现一个新的问题就是死...
出现并发问题的三个源头: 缓存导致多线程之间的可见性问题 线程之间切换带来的原子性问题 时间片:操作系统允许某个线程执行一小段时间,例如50毫秒,过了50毫秒操作系统就会重新...
msyql的事务隔离级别如下: Read uncommitted(未提交读) 事务中的修改,即使没有提交,对其它事务也是可见的. 脏读(Dirty Read). Read ...
使用“生产者-消费者模式”编写代码实现:线程A随机间隔(10~200ms)按顺序生成1到100的数字(共100个),放到某个队列中.线程B、C、D即时消费这些数据,线程B消费...