volatile是Java中的关键字,用来修饰会被不同线程访问和修改的变量
Volatile可以看做是轻量级的 Synchronized,它只保证了共享变量的可见性。
在线程 A 修改被 volatile 修饰的共享变量之后,线程 B 能够读取到正确的值。 java 在多线程中操作共享变量的过程中,会存在指令重排序与共享变量工作内存缓存的问题。
1.在volatile 不保证原子性的时候,如何通过idea 查看编译后的代码?
1..1 参考 安装插件:使用IDEA查看java文件编译后的字节码文件
2.线程操作中,Thread.yield(),sleep 线程的生命周期。jvm中运行程序的实体是线程。
2.1 yield 即 "谦让",也是 Thread 类的方法。它让掉当前线程 CPU 的时间片,使正在运行中的线程重新变成就绪状态,并重新竞争 CPU 的调度权。它可能会获取到,也有可能被其他线程获取到。
yield 和 sleep 的异同 1)yield, sleep 都能暂停当前线程,sleep 可以指定具体休眠的时间,而 yield 则依赖 CPU 的时间片划分。 2)yield, sleep 两个在暂停过程中,如已经持有锁,则都不会释放锁资源。 3)yield 不能被中断,而 sleep 则可以接受中断。