Duda sobre ArrayList y Vector.
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 List lista = 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++;
}
}
}

jcarmonaloeches