Buenos dís. Pensaba que tanto Vector como ArrayList se diferenciaban en que sus métodos eran (o no eran) thread-safe. Salió el debate en mi trabajo, y quise comprobarlo por mi mismo. Desarrollé el siguiente código. ¿Alguien puede indicarme la salida del mismo e intentar explicar la diferencia real, en un ejemplo práctico, entre Vector y ArrayList? Muchas gracias
import java.util.ArrayList; import java.util.List; public class Principal implements Runnable { private Listlista = new ArrayList (); private static List hilos = new ArrayList (); private int i = 0; private final int MAX_VAL = 1000; private final static int MAX_VAL_STATIC = 1000; private final static int MAX_HILOS = 1000; private final static int TIEMPO_ESPERA_MS = 1000; public Principal(List lista) { this.lista = lista; } public static void main(String[] args) throws InterruptedException { Long inicio = System.currentTimeMillis(); List lista = new ArrayList (); System.out.println("Iniciando hilos...."); for (int i = 0; i < MAX_HILOS; i++) { Principal p = new Principal(lista); hilos.add(p); } System.out.println("OK"); System.out.println("Ejecutando hilos...."); for (Principal hilo : hilos) { hilo.run(); } System.out.println("OK"); System.out.println("Esperando finalización"); boolean finalizado = true; do { Thread.sleep(TIEMPO_ESPERA_MS); for (Principal hilo : hilos) { if (hilo.i < MAX_VAL_STATIC) { finalizado = false; } } } while (!finalizado); System.out.println("OK"); System.out.println("EL TAMAÑO DE LA LISTA ES: " + lista.size()); Long total = System.currentTimeMillis() - inicio; } public int getI() { return i; } public void setI(int i) { this.i = i; } @Override public void run() { while (i < MAX_VAL) { lista.add("" + i); i++; } } }