### Object占字节 16字节 能被8整除 ### 计算机组成 ![img.png](img.png) >- 进程:分配资源 >- 线程:基本运行 >- 缓存:暂存数据 >- 缓存行:把同一块的数据都存缓存 >- 缓存一致性,保证各核的缓存都共享,效率低 >- 线程有序性: ### 锁的本质 >- 线程之间的序列性 >- synchronized ### 乐观锁CAS自旋 >- 比较and交换 >- 底层原子性 >- 不会阻塞 ### synchronized 锁升级 >- 重量级锁都交给操作系统 >- 偏向锁,标记名字,线程id。让原资源获得轻量级锁 >- 四种状态:无锁,偏向,轻量级、重量级 ### ThreadLocal ### markword >- 记录锁信息,记录回收次数 >- 记录偏向锁 ### 线程的基本周期 ![img_1.png](img_1.png) ### threadLocal >- 获取线程map资源,进行事务操作,获取信息 ### 并发特性 >- 原子性,有序性,可见性(volatile)cpu ### spring中的设计模式 >- 工厂模式: BeanFantory用来创建对象,在工厂里面创建对象,管理对象周期 >- 单例模式: Spring中的Bean 默认为单例 >- 装饰器模式: Beanwrapper 访问Bean的属性和方法 >- 策略模式: Bean的实例化策略 >- 代理模式: AOP的AOPProxy 代理字节码生成技术,静态代理,动态代理。 ### 线程池 >- 重量级资源 >- 生产者消费者模式,解耦,异步,增加性能 >- 缺点:不能有大量数据交换 ### 处理死锁 >- 锁资源互斥,死循环 >- 顺序加锁 >- 加锁超时时限 >- 死锁检测 ### 定位内存泄露 >- OOM ### AQS线程等待队列 >- state 变量 volatile修饰,表示同时允许多少给线程获取锁 >- 使用CAS方法获取state ### 多线程wait,notify,notifyALl线程等待 ### 线程 >- CPU调度的基本单位 >- 目的:避免等待(IO、网络等待 )操作,提高效率 >- 局限:切换上下文时,小号很大资源 >- 依赖业务场景,不能异构化任务 >- 线程安全问题 ### 串行,并行,并发 >- 并行就是同时处理 >- 并发:多线程的并发,cpu调度线程,cpu在不同的线程切换<(^-^)> ### 同步与异步 >- 被调用者,主动反馈信息, >- 异步:主动反馈 ### 阻塞与非阻塞 >- 调用者是否等待结果 >- 同步阻塞:用锅烧水,水开不主动通知,需要一直等待着水烧开 >- 同步非阻塞:不需要等待水烧开,时不时查看 >- 异步阻塞: 用水壶烧水,水来了,会有通知,一直等着烧开 >- 异步非阻塞: 用水壶烧水,水来了,会有通知,响应通知 ### 线程创建 >- Thread >- Runnable >- ![img_2.png](img_2.png) >- target 就是Runnable一个实现类,传入Thread,作为有参构造<(^-^)> ### run()和start() 的区别 >- start()会创建一个新的线程,run()是一个具体的执行方法,没有新的线程创建。