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)
在这段代码中
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,因此两个线程之间不会有任何"共享",因为它们完全是两个不同的对象.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |