Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Procesamiento multiple
Juan C. Ossa
1
1
Departamento Ciencia de la Computacin
Universidad Cooperativa de Colombia
Ingeniero Qumico UniValle
2015
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Crear con marco de trabajo Executor - proyecto01
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Crear con marco de trabajo Executor - proyecto01
Un objeto Executor crea y administra un grupo de subprocesos, al
cual se le denomina reserva de subprocesos, para ejecutar objetos
Runnable .
Los objetos Executor pueden reutilizar los subprocesos existentes
para eliminar la sobrecarga de crear un nuevo subproceso para cada
tarea, y pueden mejorar el rendimiento al optimizar el nmero de
subprocesos, con lo cual se asegura que el procesador se mantenga
ocupado, sin crear demasiados subprocesos como para que la
aplicacin se quede sin recursos.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Crear con marco de trabajo Executor - proyecto01
TaskExecutor
// crea objeto ExecutorService para administrar los subprocesos
ExecutorService ejecutorSubprocesos = Executors.newCachedThreadPool();
// inicia los subprocesos y los coloca en el estado ejecutable
ejecutorSubprocesos.execute( tarea1 );
// cierra los subprocesos trabajadores cuando terminan sus tareas
ejecutorSubprocesos.shutdown();
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
Se ilustra los peligros de compartir un objeto entre varios
subprocesos sin una sincronizacin apropiada. En este ejemplo, dos
objetos Runnable mantienen referencias a un solo arreglo entero.
Cada objeto Runnable escribe tres valores en el arreglo, y despus
termina.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
SimpleArray
La Clase ArregloSimple permitir que esos subprocesos coloquen
valores int en arreglo.
Se inicializa la variable indiceEscritura , la cual se utilizar para
determinar el elemento del arreglo en el que se debe escribir a
continuacin.
El constructor crea un arreglo entero del tamao deseado.
El mtodo agregar (int valor) permite insertar nuevos valores al
nal del arreglo.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
ArrayWriter
La clase EscritorArreglo implementa a la interfaz Runnable para
denir una tarea para insertar valores en un objeto ArregloSimple .
El constructor recibe dos argumentos: un valor entero, que viene
siendo el primer valor que insertar esta tarea en el objeto
ArregloSimple , y una referencia al objeto ArregloSimple . Luego se
invoca el mtodo agregar del objeto ArregloSimple .
La tarea se completa una vez que se agregan tres enteros
consecutivos.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
SharedArrayTest
La clase PruebaArregloCompartido ejecuta dos tareas
EscritorArreglo que agregan valores a un solo objeto ArregloSimple
. Se construye un objeto ArregloSimple con seis elementos. Luego
se crean dos nuevas tareas EscritorArreglo , una que coloca los
valores 1 a 3 en el objeto ArregloSimple , y una que coloca los
valores 11 a 13..
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto02
// construye el objeto compartido
ArregloSimple arregloSimpleCompartido = new ArregloSimple( 6 );
// crea dos tareas para escribir en el objeto ArregloSimple compartido EscritorArreglo escritor1 = new EscritorArreglo( 1, arregloSimpleCompartido );
EscritorArreglo escritor2 = new EscritorArreglo( 11, arregloSimpleCompartido );
// ejecuta las tareas con un objeto
ExecutorService ExecutorService ejecutor = Executors.newCachedThreadPool(); ejecutor.execute( escritor1 );
ejecutor.execute( escritor2 );
ejecutor.shutdown();
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto03
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto03
El problema recae en el mtodo agregar , el cual almacena el valor
de indiceEscritura , coloca un nuevo valor en ese elemento y
despus incrementa a indiceEscritura . Dicho mtodo no presentara
problemas en un programa con un solo subproceso.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
proyecto03
SimpleArray
Se declara el mtodo como synchronized , lo cual hace que todas
las operaciones en este mtodo se comporten como una sola
operacin atmica.Se realiza la primera suboperacin: almacenar el
valor de indiceEscritura . Luego se dene la segunda suboperacin,
escribir un elemento en el elemento que est en el ndice posicin .
Por ultimo se incrementa indiceEscritura . Cuando el mtodo
termina de ejecutarse, el subproceso en ejecucin libera el bloqueo
de ArregloSimple , lo cual hace posible que otro subproceso
empiece a ejecutar el mtodo agregar.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Realizar un programa en Java que lance n hilos concurrentes
(pasando n como argumento desde la lnea de comandos). Cada
hilo ejecutar un bucle de 100 iteraciones.
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Generalidades
1
Hilos
Crear con marco de trabajo Executor - proyecto01
2
Compartir datos sin sincronizacin
proyecto02
3
Cmo compartir datos con sincronizacin: hacer las operaciones
atmicas
proyecto03
4
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Juan C. Ossa Multi tarea
Hilos
Compartir datos sin sincronizacin
Cmo compartir datos con sincronizacin: hacer las operaciones atmicas
Tarea - examen 2
Ejercicio 1
Ejercicio 2
Escribir un programa que utilice hilos concurrentes para encontrar
el valor mximo de un arreglo de 500 nmeros enteros generados
aleatoriamente. Cada hilo investigar un subarreglo de 100
unidades, y el programa principal deber coordinase con ellos, para
extraer la solucin nal de las soluciones parciales. Provea la
sincronizacin que considere necesarias.
Juan C. Ossa Multi tarea
HilosCrear con marco de trabajo Executor - proyecto01
Compartir datos sin sincronizacinproyecto02
Cmo compartir datos con sincronizacin: hacer las operaciones atmicasproyecto03
Tarea - examen 2Ejercicio 1Ejercicio 2
Top Related