线程状态
- Thread.yield():提出释放CPU时间⽚的请求。不会释放锁,线程依然处于RUNNABLE状态,即调度权让给别⼈,但⽴刻可以回到竞争线程锁的状态。
- Thread.sleep():调⽤后线程处于阻塞状态,注:线程状态处于BLOCKED或WAITING或TIME_WAITING这三种统称为堵塞状态。
线程安全的常用数据结构
- HashMap:ConcurrentHashMap
- ArrayList:CopyOnWriteArrayList
- Set:CopyOnWriteArraySet
关键字
- volatile
volatile只能用于修饰变量,不能用于修饰方法或代码块。
当被volatile修饰的变量被读取的时候,是从主存读取,当被volatile修饰的变量被写入的时候,是写入到主存。
多数用于标记性作用 - volatile解决的问题
内存可见性问题
指令重排问题。 - volatile作用
保证共享变量的可见性。
保证共享变量使用时的有序性。 - 总结
synchronized 修饰方法或代码段。
synchronized 保证原子性。原子内部的代码由于不能并发执行,因此内部不存在有序性、可见性问题。因此,synchronized 可以保证线程安全。
volatile 修饰变量。
volatile 保证变量



