相关疑难解决方法(0)

并发代码中赋值运算符的返回值

鉴于以下课程:

class?Foo?{
  public?volatile?int?number;

  public?int?method1()?{
    int?ret?=?number?=?1;
    return?ret;
  }

  public?int?method2()?{
    int?ret?=?number?=?2;
    return?ret;
  }
}
Run Code Online (Sandbox Code Playgroud)

并且在同一个实例上调用多个线程method1()method2()同时执行Foo,对method1()的调用是否可以返回除1以外的任何内容?

java concurrency variable-assignment jls

34
推荐指数
3
解决办法
1万
查看次数

易失性读取是否发生在易失性写入之前?

我试着理解为什么这个例子是一个正确同步的程序:

a - volatile
Thread1:
x=a
Thread2:
a=5
Run Code Online (Sandbox Code Playgroud)

因为存在冲突的访问(存在对a的写入和读取)所以在每个顺序一致性执行中必须发生 - 在该访问之间的关系之前.假设一个顺序执行:

1. x=a
2. a=5
Run Code Online (Sandbox Code Playgroud)

1发生在2之前,为什么?

java multithreading synchronization java-memory-model

12
推荐指数
2
解决办法
1154
查看次数