ayuda con " Synchronized ", concurrencia Java
Publicado por Renzo (10 intervenciones) el 09/04/2018 17:45:09
Buen día a todos, tengo un problema con este codigo,

entiendo esto de la sguiente forma :
1.- Si creo un newFixedThread(10), significa que hay 10 hilos para ejecutar 10 tareas concurrentes
2.- Con el loop "for" envio 1000 tareas y solo 10 se ejecutaran concurrentemente, las demas esperaran un hilo disponible
3. El metodo que llama el lambda esta sincronizado, significa que solo un hilo puede ejecutarlo y otro tendra que esperar hasta que este termine
4.- Entonces si el metodo solo es usado por un hilo, porque el contador al imprimirlo no devuelve 1000, sino

o

5.- En mi logica deberia imprimir de salida siempre 1000, pero no es asi, alguien me explica el porque
entiendo esto de la sguiente forma :
1.- Si creo un newFixedThread(10), significa que hay 10 hilos para ejecutar 10 tareas concurrentes
2.- Con el loop "for" envio 1000 tareas y solo 10 se ejecutaran concurrentemente, las demas esperaran un hilo disponible
3. El metodo que llama el lambda esta sincronizado, significa que solo un hilo puede ejecutarlo y otro tendra que esperar hasta que este termine
4.- Entonces si el metodo solo es usado por un hilo, porque el contador al imprimirlo no devuelve 1000, sino
o
5.- En mi logica deberia imprimir de salida siempre 1000, pero no es asi, alguien me explica el porque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class OCP2 {
int stroke = 0;//variable no atomic
public synchronized void swimming() {
stroke++;
}
public static void main(String[] args){
ExecutorService s = Executors.newFixedThreadPool(10);
OCP2 a = new OCP2();
for(int i=0; i<1000; i++) {
s.execute(() -> a.swimming());
}
s.shutdown();
System.out.println(a.stroke);
}
}
Valora esta pregunta


0