函数变量值在多线程中共享?

时间:2011-06-21 13:19:58

标签: java multithreading

以下是示例代码

Class Abc {

  void method1(){
      ExecutorService threadPool = Executors.newFixedThreadPool(10);
       for(int i=0;i<100;i++){
        threadPool.execute(new Runnable() {
             doSomeThing(Param);
         });
        }
        threadPool.shutdown();
  }

  void doSomeThing(Param param){
        Object ref1,ref2,ref3,ref4;
  }
}

这里我们在多线程中执行doSomeThing()方法。 doSomeThing()方法有很多对象引用。

我的问题是,如果任何线程更改了对象引用的状态,这个更改是否对其他线程可见?

如果是这样,我需要做什么才能让线程拥有自己的状态。我知道我们可以通过在execute()中传递它的同时创建一个新的类实例来解决这个问题。我试图用这种风格解决问题

2 个答案:

答案 0 :(得分:0)

每次调用doSomeThing都会获得自己的一组变量,无论它们是否在同一个线程中。

变量将等于您在每次调用中设置的变量。

答案 1 :(得分:0)

  
    

我的问题是,如果任何线程更改了对象引用的状态,这个更改是否对其他线程可见?

  

简单的答案是。但是,这太简单了,无法提供帮助。

您所询问的是多线程概念的基础。基本上,如果您同时将同一个对象传递给多个线程,则每个线程对该对象所做的更改必须仔细编排,否则您必须忍受不可预测的结果。