I have been reading, and I found out that no matter, where object is created on code e.g. as member variable, local variable or class variable, they are always created inside heap space in Java. I'm wondering if in this example the ArrayList
created when executing doSomething()
, will be shared between threads generating concurrency problems, or two different instances are created in the heap.
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();