Java基础之多线程高级主题

任务定时调度

掌握Timer和TimerTask
在这里插入图片描述

HappenBefore

指令重排:执行代码的顺序可能与编写代码的顺序不一致,即虚拟机优化代码顺序,则为指令重排。在硬件层面和虚拟机层面都可能存在指令重排。在指令重排时,编译器和处理器会遵守数据依赖性。不会随意更换顺序。

valatile

它保证了线程间变量的可见性。它保证了同步的数据可见,也被称为轻量级的synchronized。但是它不能保证原子性。只保证了数据的同步。现在已经很少用了。

单例模式

了解它的套路以及DoubleChecking

ThreadLocal

ThreadLocal:每个线程的本地存储区域。
JDK中常用private static修饰
ThreadLocal:常用方法get/set/initialValue。

ThreadLocal:分析上下文环境 看起点

  • 1 构造器: 哪里调用就属于哪里 主要找线程体
  • 2 run方法:就是本线程自己的。

InheritableThreadLocal<>()子类 ;继承上下文环境的数据,一样找起点。

  • 拷贝一份给子线程

可重入锁

解释

锁的分类

按是否可以沿用分为:不可重入锁和可重入锁
可重入锁又分为公平锁和不公平锁。
悲观锁:synchronized就是独占锁,即悲观锁,它会导致其他需要锁的线程挂起,直到持有锁的线程释放锁。
乐观锁:每次不加锁而是假设没有冲突去完成某项操作,如果因为冲突失败就一直重试,直到成功为止。

乐观锁的实现
同步块中如果是成员方法,则锁定this,如果是静态方法,则锁定 相应对象.class

程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
原子性操作:原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。

java.util.concurrent(简称JUC )

猜你喜欢

转载自blog.csdn.net/qq_35383654/article/details/86029581