摘要:
1.为什么要使用多线程 提升程序性能 衡量性能指标主要由吞吐量和延迟, 延迟:越短,程序执行的越快,性能越好 吞吐量:单位时间能处理的请求数,吞吐量越大,程序处理的请求越多,性能越好 核心 第延迟,高吞吐量 2.多线程应用场景 优化算法 硬件性能发挥到极致(提升IO的利用率和cpu利用率) 多线程方 阅读全文
摘要:
1.java的线程与操作系统线程一一对应 2.通用线程生命周期 初试状态,可运行状态,运行状态,休眠状态,终止状态 初试状态,线程已经被创建,还不允许被cpu执行,编程语言特有的,而操作系统还没有被创建 可运行状态,线程可以被cpu执行,这种状态下,真正操作系统的线程已经被成功创建了,可以分配cpu 阅读全文
摘要:
1.管程 管程就是解决并发问题的万能钥匙 管理共享变量以及对共享变量的操作过程,让他们支持并发 2.MESA模型 互斥:统一个时刻只允许一个线程访问共享资源 同步:线程之间如何通信,协作 解决互斥问题:将共享变量及对共享变量的操作统一封装起来。 将线程不安全的队列封装起来,对外提供线程安全的操作方法 阅读全文
摘要:
1.安全性问题 线程安全:本质上就是正确性。 避免原子性问题,可见性问题,有序性问题,就是线程安全的程序 什么情况需要考虑安全性问题? 存在共享数据并且该数据会发生变化。多线程同时读写同一数据。 如果不共享数据,状态就不会发生变化 ThreadLocal,TLS ,不变模式 2.活跃性问题 某个操作 阅读全文
摘要:
1.循环等待 转出账本和转入账本不满足时,用死循环的方式循环等待 // 一次性申请转出账户和转入账户,直到成功 while(!actr.apply(this, target)) ; 耗时非常短,并发冲突量不大时,还可以,耗时长的话,太耗cpu了 2.最优解决方案 线程要求的条件(转出账本和转入账本同 阅读全文
摘要:
1.3个人互相转账 3个人互相转账,串行 2.账本 文件架上有转出账本+转入账本,同时拿走 文件架上只有转出账本,柜员就先把文件架上的转出账本拿到手里,同时等着另一个账本送回来。 文件架上一个账本都没有,等两个账本都回来。 3.明细 class Account { private int balan 阅读全文