我有一個方法(下面的例子)創建一個新的列表,將一些東西放入它,並將它傳遞給另一個線程進行操作。將本地新對象傳遞給線程,線程安全嗎?
這似乎是線程安全的。該列表是本地的創建它的方法。該方法在列表上運行,並且不會將它傳遞給另一個線程,直到完成對它的操作爲止。
但這感覺錯誤,因爲該列表是在兩個單獨的線程中訪問,但它不同步。
這是可以接受的線程安全代碼嗎?
class App
{
public static void main(String[] args)
{
final ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(5);
final ExecutorService es = Executors.newSingleThreadExecutor();
es.execute(new Runnable() {
@Override public void run()
{
for (Integer i : list)
System.out.println(i);
}});
es.shutdown();
}
}