如何将volatile变量传递给另一个类?

时间:2016-06-23 00:33:11

标签: java multithreading volatile

在将volatile变量传递给另一个类(都扩展Thread类)时,我是否必须将此volatile变量导入为volatile或公共定义就足够了?

例如:

public class A extends Thread{

     public volatile int a = 0;

 public void run(){
     B bObj = new B(a);
     a++;
 }
}

现在接收volatile变量的类应该使用接收器变量定义为volatile还是public?像这样

public class B extends Thread{

  public volatile int a;

    public B(int a){
     this.a =a ;
    }
  }

OR应该这样定义吗?

public class B extends Thread{

  public int a;

    public B(int a){
     this.a =a ;
    }
  }

两个班级在一段时间内交换变量或另一个班级。

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

Java是按值传递的。在B构造函数中,您没有在A中存储对a对象的bObj字段的引用;你只是存储价值。 (换句话说,B不是"接收易变变量&#34 ;;它正在接收恰好存储在volatile字段中的。 )a对象和A对象中B字段的值可以单独更改值。

根据您发布的代码,无需将A.a声明为volatile