java - 关于简单 Java 程序的语义

标签 java multithreading

考虑一个 Java 类 A,其中 fA 的一个 Integer 字段,并且 uA 类中方法 foo() 的局部 Integer 变量。

class A{

     int f; 

    void foo(){  
       int u;
    ... 
       f = 7;
       u = f;
    ...
   }
    ....
}

这样说是错误的吗:

       variable ‘u’ MUST be 7 at the end of “f=7; u =f;”?

我的观点是“f”可能会被其他线程更改,所以上面的说法一般来说应该是错误的。我说得对吗?

感谢您的想法。

最佳答案

是的,执行可以在 f=7、u=f 之间中断。您将此称为关键区域,可以使用锁、互斥锁或信号量来保护它。通过这种方式,您可以确保没有其他线程(甚至硬件中断,在 Java 中不行;))更改您的数据而不一定需要它。

关于java - 关于简单 Java 程序的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23386643/

相关文章:

java - 进程不在类型变量 T 的范围内

java - 如何正确输出正确的 double 值?

c++ - WSAAsync从另一个线程选择并发送

android - 在不使用 AsyncTask 的情况下在 Android 中执行网络操作

C++延迟任务

java - 执行时缺少所需的类

java - 使用 JdbcTemplate 字段扩展 java spring 单例抽象类

java - oracle 每小时状态报告

python - GUI 卡住了其余的 python 代码

c++ - NSObject PerformSelector 问题