对象创建为局部变量

Nic*_*las 1 java concurrency multithreading

我一直在阅读,我发现无论在代码上创建对象,例如成员变量,局部变量或类变量,它们总是在Java中的堆空间内创建.我想知道在这个例子中ArrayList,执行时创建的doSomething()是否会在生成并发问题的线程之间共享,或者在堆中创建两个不同的实例.

public ArrayList<T> doSomething(){
    ArrayList<T> list = new ArrayList<>();
    //...Add content to the list
    return list;
}

public void printList(ArrayList<T> list){
    for(T element: list)
        System.out.println(element);
}

Thread thread1 = new Thread(new Runnable{
      public void run(){
           printList(doSomething());
      }
}

Thread thread2 = new Thread(new Runnable{
      public void run(){
           printList(doSomething());
      }
}

thread1.start();
thread2.start();
Run Code Online (Sandbox Code Playgroud)

alb*_*hin 5

在这段代码中

public ArrayList<T> doSomething(){
    ArrayList<T> list = new ArrayList<>();
    //...Add content to the list
    return list;
}
Run Code Online (Sandbox Code Playgroud)

thread1.start();
thread2.start();
Run Code Online (Sandbox Code Playgroud)

你创建了两个ArrayLists,因此两个线程之间不会有任何"共享",因为它们完全是两个不同的对象.