2011-06-21 50 views
1

下面是示例代码函数变量值在多线程中共享?

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()中传递它来创建一个新的类实例来解决这个问题。我试图用这种方式解决问题

+0

尝试使用克隆。 ** ref1.Type ref = ref1.clone(); ** –

+0

做ref1,ref2等从参数中获取它们的值吗? – Marcelo

+0

是的,它是从参数 – Madhu

回答

0

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

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

+0

获取值你是否指的是函数变量ref1,ref2 ..即使doSomeThing()方法在具有相同Abc实例的多线程中运行,状态也不会改变? – Madhu

+0

@Madhu:这取决于变量中的内容。 – SLaks

0

我的问题是,如果任何线程改变对象引用的国家将这种变化对其它线程可见?

而简单的答案是肯定的。但是,这太简单了,没有帮助。

你在问什么是多线程概念的基础。实质上,如果你同时传递同一个对象到多个线程,那么每个线程对对象所做的更改都必须仔细编排,否则你必须忍受不可预知的结果。