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



下面是示例代码

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()中传递它。我正试图解决这种风格的问题

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

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

我的问题是,如果任何线程更改了对象引用的状态,其他线程会看到这种更改吗?

简单的答案是。然而,这太简单了,没有任何帮助。

您所要求的是多线程概念的基础。从本质上讲,如果同时将同一个对象传递给多个线程,那么每个线程对对象所做的更改要么必须经过精心设计,要么必须承受不可预测的结果。

最新更新