Autor Tema: Java qué es sincronización entre hilos y las aplicaciones concurrentes CU00911C  (Leído 1893 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola dejo el ejercicio CU00911C Paquete java.lang. Interfaces, clases (String, Stringbuffer, StringBuilder) Concepto de inmutabilidad. 

Citar
EJERCICIO

En esta entrega hemos podido ver lo siguiente: StringBuilder puede ofrecer resultados no consistentes en una ejecución multihilo (concurrente, con distintos “subprogramas” ejecutándose simultáneamente) ya que sus métodos no son sincronizados.

Busca información en internet y trata de poner un ejemplo de cómo podría generarse una inconsistencia en programación multihilo. No hace falta que escribas código, únicamente es necesario describir en unas pocas líneas (como si estuvieras explicándoselo a un amigo) la idea o situación.

Buscando en internet he encontrado este ejemplo y creo que es muy bueno par explicar la inconsistencia entre hilos de java.:
Citar
Suponga un simple campo int definido e inicializado:
int counter = 0;
el campo counter es compartido entre dos hilos, A y B. Suponga que el hilo A incrementa counter.

counter ++;
Entonces enseguida el hilo B imprime counter:
System.out.println (counter);


Si las dos sentencias han sido ejecutado en el mismo hilo, sería seguro asumir que el valor impreso podría ser “1”.
Pero si las dos sentencias son ejecutadas en hilos separados, el valor impreso podría ser “0”, porque no hay garantía que el cambio hecho por el hilo A a counter va a ser visible al hilo B -- amenos que el programador haya establecido una relación sucede-antes entre estas dos sentencias.

Si tenemos dos procedimientos diferentes y en uno incrementamos counter++ y en otro presentamos por pantalla counter, para que no haya inconsistencia se tendría que llamar al procedimiento que incrementa el contador antes de llamar a presentar por pantalla.
Si se llamara al procedimiento que presenta por pantalla el counter antes de incrementarlo no presentaríamos un valor real del counter (o si porque igual queremos presentar ese valor sin incremento) lo cual da lugar a inconsistencia de los datos ya que al trabajar con dos hilos diferentes sin sincronizar no presenta los datos reales.

Como dice Ogramar en https://aprenderaprogramar.com/foros/index.php?topic=6848.msg25434#msg25434

Citar
Supongamos una aplicación multihilo donde un hilo 1 se encarga de realizar la reserva de un determinado asiento en un avión, mientras que otro hilo 2 se encarga de consultar los asientos libres en el avión para servirlos a una página web e informar así a un usuario que quiere realizar una compra o reserva.

Supongamos que los asientos y si están libres u ocupados están localizados en una estructura de datos localizada en ciertas posiciones de memoria principal cuya escritura requiere 2 segundos y cuya lectura requiere 1 segundo (ejemplo no real).

Supongamos que a las 10:00:00 una persona ha comprado un asiento pero la escritura no se ha formalizado hasta las 10:00:02, mientras que otra persona ha consultado los asientos libres a las 10:00:01.

Si no existe sincronización, implica que no está establecido quién tiene preferencia para usar el recurso, en este caso la memoria, y el resultado sería que la persona que ha consultado el estado de los asientos obtendría como resultado que el asiento que ha comprado la otra persona está libre.

Cuando existe sincronización, implicaría que sí está establecido quién tiene preferencia para usar el recurso, y el resultado sería que la persona que ha consultado el estado de los asientos no podría conocerlo hasta que termine el otro hilo de trabajar.
Gracias.
Un Saludo ;)
« Última modificación: 17 de Agosto 2019, 14:09 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, para quien revise este ejercicio, respuestas correctas conforme a lo que se pedía.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".