- javac -encoding UTF-8 UnsafeThread.java 编译成.class
- javap -c UnsafeThread.class 进行反编译,得到相应的字节码指令
- 0: getstatic #2 获取指定类的静态域,并将其押入栈顶 3: iconst_1 将int型1押入栈顶 4: iadd 将栈顶两个int型相加,将结果押入栈顶 5: putstatic #2 为指定类静态域赋值 8: return
- 例子中,产生线程不安全问题的原因: num++ 不是原子性操作,被拆分成好几个步骤,在多线程并发执行的情况下,因为cpu调度,多线程快递切换,有可能两个同一时刻都读取了同一个num值,之后对它进行+1操作,导致线程安全性。
从字节码角度剖析线程不安全操作
最新推荐文章于 2023-07-31 10:44:55 发布