Ho un metodo (esempio sotto) che crea un nuovo elenco, inserisce alcune cose e lo passa ad un altro thread su cui operare.Passare un nuovo oggetto locale a un thread, thread-safe?
Questo thread sembra sicuro. L'elenco è locale al metodo che lo crea. Il metodo funziona sull'elenco e non lo passa a un altro thread finché non viene eseguito su di esso.
Ma questo si sente in errore, poiché l'elenco è accessibile in due thread separati ma non è sincronizzato.
È accettabile questo codice thread-safe?
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();
}
}