Java指令重排序不影响单线程下执行结果。那么比如main线程里有
System.out.println("1");
System.out.println("2");
这两句话会重排导致输出21吗?这里似乎没有数据依赖?
无
Java指令重排序不影响单线程下执行结果。那么比如main线程里有
System.out.println("1");
System.out.println("2");
这两句话会重排导致输出21吗?这里似乎没有数据依赖?
无
Java单线程中指令重排序不会导致输出结果的变化。
在Java中,虽然编译器和处理器可能会对指令进行重排序,但这种重排序对于单线程程序来说是透明的,即它不会影响单线程程序的执行结果。编译器和处理器在重排序时,会遵守“as-if-serial”语义,即不管怎么重排序,单线程程序的执行结果不能被改变。
对于你给出的示例:
System.out.println("1");
System.out.println("2");
即使编译器或处理器对这两条指令进行了重排序,输出结果仍然会是“1”和“2”,且顺序不会改变。这是因为这两条指令之间没有数据依赖关系,且Java内存模型保证了每个线程都有自己的本地内存,本地内存中的变量值不会被其他线程看到,除非通过显式的同步机制(如volatile、synchronized等)进行共享。
所以,在单线程中,你不需要担心指令重排序会影响程序的执行结果。但在多线程环境中,指令重排序可能会影响到程序的正确性,因此需要特别注意。
4 回答1.1k 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答688 阅读✓ 已解决
2 回答1.6k 阅读
2 回答1.6k 阅读
2 回答1.2k 阅读
不会,指令重排如果能达到这种效果那就不是重排是乱排了
指令重排影响的是多线程,单线程是没问题的