
Java内存规范:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量值,以及在必须时如何同步地访问共享变量。
堆:运行时数据区,垃圾回收,动态分配内存,生存区也不用预先购入内存区。存取速度略慢
栈:存取速度比堆快,仅次于计算机的寄存器,数据可以共享,存在栈的数据大小与生存区必须是确定的,缺乏灵活性。主要存放一些基本类型的变量
Java内存模型要求对象存在堆中,本地变量和调用栈存放在线程栈上
如果两个线程同时调用了同一个对象的同一个方法,都会访问对象的成员变量,但这两个线程都拥有的是这个成员变量的私有拷贝。
CPU、高速缓存、主存
所有的线程栈和堆都分布在主内存里面,部分可能会出现在CPU缓存中和CPU内部的寄存器里
并发编程与线程安全
PostMan接口模拟测试,并发模拟测试
线程安全性
原子性-锁
发布对象:
AbstractQueuedSynchronizer-AQS
线程池
ThreadPoolExecutor
先看corePoolSize,再看workQueue,最后看maximumPoolSize
死锁
Spring与线程安全
高并发处理思路与手段
1、扩容
主要是在客户端实现
1、性能极高
2、支持多种数据类型
3、
4、使用于场景
消息队列
数据库切库
主库主要负责数据更新和实时数据的查询,从库负责非实时的数据查询
横向分表:表结构一样,单表容量
纵向分表:根据活跃度分表