我一直在阅读,我发现无论在代码上创建对象,例如成员变量,局部变量或类变量,它们总是在Java中的堆空间内创建.我想知道在这个例子中ArrayList
,执行时创建的doSomething()
是否会在生成并发问题的线程之间共享,或者在堆中创建两个不同的实例.
public ArrayListdoSomething(){ ArrayList list = new ArrayList<>(); //...Add content to the list return list; } public void printList(ArrayList 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();
albusshin.. 5
在这段代码中
public ArrayListdoSomething(){ ArrayList list = new ArrayList<>(); //...Add content to the list return list; }
和
thread1.start(); thread2.start();
你创建了两个ArrayList
s,因此两个线程之间不会有任何"共享",因为它们完全是两个不同的对象.