Cuestionario Hilos Unidad 4

download Cuestionario Hilos Unidad 4

of 16

Transcript of Cuestionario Hilos Unidad 4

Tpicos Selectos de Programacin

YESENIA VIRIDIANA VALENCIA AVIA

Tpicos Avanzados de Programacin

Programacin concurrente multihilo

Qu diferencia existe entre utilizar la interfaz Runnable o la clase Thread al implementar una aplicacin que contendr hilos?

El uso de la clase Thread requiere utilizar herencia. Debera usarse cuando haya que sobrescribir algn otro mtodo.El uso de la interfaz runnable permite que la clase herede de cualquier otra (ms verstil). Sin embargo, la ejecucin requiere la construccin de un objeto aadido (aquel que implementa el interfaz Runnable) adems del objeto Thread.

Qu mtodos contiene la interfaz Runnable y que funcin tiene ste?

public Thread(Runnable target) as lo usamos en el ejemplo arriba, se pasa solamente la implementacin de la interfaz Runnable

public Thread(Runnable target, String name) se pasa adicionalmente un nombre para el hilo

public Thread(ThreadGroup group, Runnable target) construye un hilo dentro de un grupo de hilos

public Thread(ThreadGroup group, Runnable target, String name)

construye un hilo con nombre dentro de un grupo de hilos

La interfaz Runnable exige solamente el mtodo run(), sin embargo, normalmente se implementan ms mtodos para crear un servicio completo que este hilo debe cumplir.

Aunque no hemos guardado las referencias de los hilos en unas variables, los hilos no caen en las manos del recolector de memoria: siempre se mantiene una referencia al hilo en su grupo al cual pertenece.

El mtodo run() es pblico y en muchos casos, implementando algn tipo de servicio, no se quiere dar permiso a otros ejecutar directamente el mtodo run(). Para evitar eso se puede recurrir a la siguiente construccin:

class Service

Qu mtodos podemos sobrescribir de la clase Thread y que funcin realizan?

Un ejemplo de esto es el mtodorun()de la clase Thread. La clase Thread proporciona una implementacin vaca (el mtodo no hace nada) para el mtodorun(), porque por definicin, este mtodo depende de la subclase. La clase Thread posiblemente no puede proporcionar una implementacin medianamente razonable del mtodorun().

Para reemplazar completamente la implementacin de un mtodo de la superclase, simplememte se llama a un mtodo con el mismo nombre que el del mtodo de la superclase y se sobreescribe el mtodo con la misma firma que la del mtodo sobreescrito.

class ThreadSegundoPlano extends Thread {

void run() {

. . .

}

}

Cul es la importancia del mtodo run(), en una aplicacin que maneje hilos?Mtodo que representa la actividad del hilo.Se puede redefinir este mtodo en una subclase. El mtodorun()estndar ejecuta el objeto que se pas al constructor en como argumentotarget, de haberlo, con argumentos secuenciales y por clave tomados de los argumentosargsykwargs, respectivamente.

Qu importancia tiene el mtodo start() en el manejo de los hilos? Y a que mtodo llama?Inicia la actividad del hilo.Debe llamarse a lo sumo una vez por objeto hilo. Hace las gestiones para que se llame al mtodorun()del objeto es un hilo de control separado.

Por qu estados puede pasar un hilo?, en que consisten estos? Y qu mtodos intervienen en cada uno de estos?

Un hilo puede tener solo uno de los cinco estados.

NewEste es el estado despues de que el hilo instanciado se haya creado, pero el metodostart()no ha sido invocado todavia. Es un objeto Thread vivo, pero aun sin ejecutar. En este punto el hilo se consideranot alive.

RunnableEn este estado, el hilo puede ser elegido para ser ejecutado por el administrador de tareas, pero el administrador aun no lo ha elegido. El hilo primero entra en el estado derunnablecuando el metodostart()se ha invocado, pero un hilo puede tambien volver al estado de runnable despues de haber estado ejecutandose, o volviendo del estado de espera/bloqueo, o sleep. Cuando el hilo esta en estado runnable se le considera alive.

RunningAqui es donde esta la accion. Es el estado donde el hilo ha sido seleccionado por el administrador de tareas desde la piscina de runnables para entrar al proceso de ejecucion. Un hilo puede cambiar del estado derunninga otro estado por varias razones. incluyendo porque "al administrador de tareas se le antoja". Bien, veremos esas razones en breve. Fijate en el grafico anterior, hay varias maneras de volver al estadorunnable, pero solo una para serrunning, el administrador de tareas lo elige de entre todos los posibles de la piscina derunnables.

Waiting/blocked/sleepingEste estado se puede alcanzar cuando un hilo esta disponible para ser ejecutado. Bien, asi que estos son tres estados combinados en uno, pero todos ellos tienen algo en comun, el hilo esta aun alive, pero actualmente, no estan disponibles para ser ejecutados. En otras palabras, no estan en la piscina de runnables, pero pueden volver al estado mas tarde si algun evento en particular los activa.

DeadUn hilo se le consideradeadcuando su metodorun()se ha completado. Puede estar todavia viable el objeto Thread, pero ya no esta separado del hilo principal de ejecucion. Una vez que el hilo esta muerto, no puede ser devuelto a la vida! Sin invocasstart()en un una instancia de un hilo muerto, conseguiras una excepcion en tiempo de ejecucion.

Qu pasos se pudieran seguir para disear una aplicacin basada en hilos?

En Java los hilos estn en el paquete

java.lang.thread

y se puede usar por ejemplo dos hilos para realizar un pequeo pingPONG:

Thread PingThread = new Thread();

PingThread.start();

Thread PongThread = new Thread();

PongThread.start();

Por defecto, un hilo nuevamente creado y lanzado an siendo activado as no hace nada. Sin embargo, los hilos se ejecutan durante un tiempo infinito y hay que abortar el programa de forma bruta: control-C en el terminal.

Extendemos la clase y sobre-escribimos el mtodorun()para que haga algo til:

public class CD_PingThread extends Thread {

public void run() {

while(true) {

System.out.print("ping ");

}

}

}

El hilo hereda todo de la claseThread, pero sobre-escribe el mtodorun(). Hacemos lo mismo para el otro hilo:

public class CD_PongThread extends Thread {

public void run() {

while(true) {

System.out.print("PONG ");

}

}

}

Y reprogramamos el hilo principal:

CD_PingThread PingThread=new CD_PingThread();

PingThread.start();

CD_PongThread PongThread=new CD_PongThread();

PongThread.start();

Qu pasos se pudieran seguir para disear una applet que contenga hilos?import java.applet.*;

import java.awt.*;

import java.util.Date;

import java.text.DateFormat;

public class Rel extends Applet implements Runnable {

Label time;

DateFormat timeFormat;

Thread timer;

volatile boolean running;

public void init() {

time = new Label();

time.setFont(new Font("helvetica", Font.BOLD, 12));

time.setAlignment(Label.CENTER);

setLayout(new BorderLayout());

add(time, BorderLayout.CENTER);

timeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);

}

public void start() {

running = true;

if (timer == null) {

timer = new Thread(this);

timer.start();

}

}

public void run() {

while(running) {

time.setText(timeFormat.format(new Date()));

try { Thread.sleep(1000); }

catch (InterruptedException e) {}

}

timer = null;

}

public void stop() { running = false; }

public String getAppletInfo() {

return "Un applet desplegando la hora";

}

}

Crear unapplet

Para crear unappletnecesitamos escribir una clave de la clase Applet del paquetejava.applet.*;

import java.applet.*;

public class MiApplet extends Applet

{

//Cuerpo del ''applet''.

}

El cdigo anterior declara una nueva clase MiApplet que hereda todas las capacidades de la clase Applet de Java. El resultado es un fichero MiApplet.java.

Una vez creada la clase que compone elapplet, escribimos el resto del cdigo y despus lo compilamos, obteniendo el fichero MiApplet.class. Para poder crear elappletse necesita compilar el cdigo Java en un intrprete.

import java.applet.*;

import java.awt.*;

import java.util.*;

import java.text.DateFormat;

public class MiApplet extends Applet implements Runnable

{

private Thread hilo = null;

private Font fuente;

private String horaActual = "00:00:00";

public void init()

{

fuente = new Font("Verdana", Font.BOLD, 24);

}

public void start()

{

if (hilo == null)

{

hilo = new Thread(this, "Reloj");

hilo.start();

}

}

public void run()

{

Thread hiloActual = Thread.currentThread();

while (hilo == hiloActual)

{

//obtener la hora actual

Calendar cal = Calendar.getInstance();

Date hora = cal.getTime();

DateFormat df = DateFormat.getTimeInstance();

horaActual = df.format(hora);

repaint();

try

{

Thread.sleep(1000);

}

catch (InterruptedException e){}

}

}

public void paint(Graphics g)

{

//Dibujar un rectngulo alrededor del contenedor

g.draw3DRect(1, 1, getSize().width-3, getSize().height-3, false);

//Establecer la Fuente

g.setFont(fuente);

//mostrar la Hora

g.drawString(horaActual,14,40);

}

public void stop()

{

hilo = null;

}

}

Qu tipo de aplicaciones pudieran generarse con el uso de hilos?, mencionar mnimo 10 ejemplos

1-un hilo puede hacer una busqueda larga en una base de datos o en el file system, mientras otro hilo dibuja la interfaz grfica al usuario. 2-En un servidor web, un hilo puede atender las peticiones entrantes y crear un hilo por cada cliente que tenga que atender.

3-En una animacin, puede haber varios hilos dibujando varias partes de la pantalla.

4- Utilizacin de los hilos para expresaralgoritmos inherentemente paralelos. Se pueden obtener aumentos de rendimiento debido al hecho de que los hilos funcionan muy bien en sistemas multiprocesadores. Los hilos permiten expresar el paralelismo de alto nivel a travs de un lenguaje de programacin.

5- Utilizacin de loshilos en interfaces de usuario

6- Utilizacin de loshilos en servidores

7- tilizacin de loshilos en el diseo de un kenelmultihilo de sistema operativo distribuido que distribuya diferentes tareas entre los hilos.

8- Utilizacin de loshilos para explotar la potencia de los multiprocesadoresde memoria compartida (sistemas fuertemente acoplados).

9- Utilizacin de loshilos como soporte de aplicaciones de tiempo realacelerando los tiempos de respuesta para los eventos asncronos a travs de la gestin de seales.

10- manejo de seales, como por ejemplo las interrupciones del teclado: se puede dedicar un hilo a la espera de seales, en vez de que stas interrumpan el proceso. Normalmente, el hilo se bloquea a la espera de seales, y cuando se produce una seal, despierta y la procesa. Esto puede eliminar la necesidad de interrupciones a nivel de usuario.Por que es importante manejar la prioridad de los hilos?

Prioridad

Cada hilo tiene una prioridad, que no es ms que un valor entero entre 1 y 10, de modo que cuanto mayor el valor, mayor es la prioridad.

El planificador determina el hilo que debe ejecutarse en funcin de la prioridad asignada a cada uno de ellos. Cuando se crea un hilo en Java, ste hereda la prioridad de su padre, el hilo que lo ha creado. A partir de aqu se le puede modificar su prioridad en cualquier momento utilizando el mtodo setPriority . Las prioridades de un hilo varan en un rango de enteros comprendido entre MIN_PRIORITY y MAX_PRIORITY (ambas definidas en la clase Thread). El entero ms alto designar la prioridad ms alta y el ms bajo, como es de esperar, la menor. Se ejecutar primero el hilo de prioridad superior, el llamado Ejecutables, y slo cuando ste para, abandona o se convierte en No Ejecutable, comienza la ejecucin de un hilo de prioridad inferior. Si dos hilos tienen la misma prioridad, el programador elige uno de ellos en alguna forma de competicin. El hilo seleccionado se ejecutar hasta que:

Un hilo con prioridad mayor pase a ser Ejecutable.

En sistemas que soportan tiempo-compartido, termina su tiempo.

Abandone, o termine su mtodo run.

Luego, un segundo hilo puede ejecutarse, y as continuamente hasta que el intrprete abandone.

Cul es la prioridad estndar o dada por definicin en Java a un hilo que se crea?

Java es un lenguaje de programacin que incorpora hilos en el corazn del mismo lenguaje.

Comnmente, los hilos son implementados a nivel de sistema, requiriendo una interfaz deprogramacin especfica separada del ncleo del lenguaje de programacin.

En que consiste la planificacin de los hilos?Con los hilos el concepto de ejecucin se separa del resto de la definicin de un proceso. Una aplicacin puede implementarse como un conjunto de hilos que cooperan y ejecutan concurrentemente en el mismo espacio de direcciones.En un monoprocesador, los hilos pueden usarse como una ayuda a la estructuracin de un programa y para solapar la E/S y el procesamiento. Puesto que la penalizacin por el intercambio de hilos es mnima, comparada con el intercambio de procesos, stos beneficios se llevan a cabo a bajo costo.Sin embargo, toda la potencia de los hilos se hace evidente en un sistema multiprocesador, puesto que pueden emplearse para obtener un paralelismo real en las aplicaciones posibilitando un aumento drstico del rendimiento. Sin embargo, puede demostrarse que, en aplicaciones que exijan una interaccin considerable entre los hilos (paralelismo de grano medio), pequeas diferencias en la planificacin y gestin de hilos pueden tener un impacto significativo en el rendimiento.Elementos y mtodos claves: entre las diversas propuestas de planificain de hilos para multiprocesadores y de asignacin de procesadores, se destacan los siguientes cuatro mtodos:Reparto de carga:los procesos no se asignan a un procesador en particular. Se mantiene una cola global de hilos listos y cada procesador, cuando est ocioso, selecciona un hilo de la cola. Este trmino se emplea para diastinguir esta estratgia del esquema de balance de carga en el que el trabajo se asigna de forma mas permanente.Planificacin por grupos:se panifica un conjunto de hilos afines para su ejecucin en un conjunto de procesadores al mismo tiempo, segn la realcin de uno a uno.Asignacin dedicada de procesadores:es el enfoque opuesto al reparto de carga y ofrece una planificacin implcita definida por la asignacin de hilos a los procesadores. Mientras un programa se ejecuta, se le asigna un nmero de procesadores igual al nmero de hilos que posea. Cuando el programa finaliza, los procesadores retornan a la reserva general para posibles asignaciones a otros programas.Planificacin dinmica:el nmero de hilos en un programa se puede cambiar en el curso de la ejecucin.Qu es un hilo demonio y para que puede ser utilizado?, dar mnimo cinco ejemplos

Es un proceso que debe ejecutarse continuamente en modo background

(en segundo plano), y generalmente se disea para responder a peticiones de otros procesos a travs de la red.

Los hilos demonio tambin se llaman servicios, porque se ejecutan, normalmente, con prioridad baja y proporcionan un servicio bsico a un programa o programas cuando la actividad de la mquina es reducida.

Si una aplicacin va a generar varios hilos que realicen actividades diferentes, estos pueden ser programados en la misma clase, o se requiere una clase diferente por cada actividad?, por ejemplo que unos hilos realicen la lectura de datos, otros la impriman, otros realicen operaciones de suma, otros de resta, por mencionar un caso. Si se puede

Que es un programa residente en memoria?

Es un programa que permanece en la memoria del ordenador, por eso hablamos de programas residentes en memoria. Cualquier aplicacin que uses en tu ordenador (juego, p2p, editor de imgenes, word, etc) ocupa cierta cantidad de memoria pero cuando cierras el programa la memoria se libera y puede ser utilizada para otro fin. Los programas residentes permanecen todo el tiempo en memoria, aunque no ests utilizndolo en ese momento y por tanto ocupan permanentemente una porcin de la memoria de tu ordenador.

Cada vez que enciendes el ordenador los programas residentes en memoria, como el antivirus, se cargan junto con el sistema operativo de forma que estos programas estn disponibles desde el primer momento. En el caso del antivirus sto permite que el sistema est protegido desde que el ordenador arranca sin que tengas tu que abrir el antivirus cada vez que enciendes el ordenador.

Qu se entiende por una aplicacin que se ejecuta en primer plano?, da tres ejemplos Solo puede haber un proceso en primer plano al mismo tiempo, el proceso que esta en primer plano, es el que interactua con usted recibe entradas de teclado, y enva las salidas al monitor. (Salvo, por supuesto, que haya redirigido la entrada o la salida,)

Qu se entiende por una aplicacin que se ejecuta en segundo plano?, da tres ejemplos Los programas que se ejecutan en segundo plano son aquellos que siguen abiertos en forma silenciosa ejemplo: los antivirus si te fijas abajo a tu derecha al lado de donde esta la hora te vas a dar cuenta que tenes algunos iconos que estn activos esos son los programas que estn en segundo plano hay miles te digo algunos: daemon tools, tune up utilities, antivirus la gran mayoria, gamebooster etc

Cmo se crea un demonio en Java?Puede marcar un hilo como un demonio usando el mtodo setDaemon. Segn el doc de java: Marca este hilo como un hilo de demonio o un subproceso de usuario. La mquina Virtual Java sale cuando las roscas slo ejecuta todos los subprocesos del demonio. Debe llamar a este mtodo antes de inicia el subproceso.

Primero, este mtodo llama al mtodo checkAccess de este hilo sin argumentos. Esto puede resultar en lanzar una excepcin SecurityException (en el subproceso actual).

En qu consiste el algoritmo o protocolo de productor-monitor-consumidor, y para que se utiliza?

Este conjunto de situaciones de programacin son conocidos como escenarios productor/consumidor; donde el productor genera un canal de datos que es consumido por el consumidor.Algunos lenguajes de programacin, como Java, proporcionan una caracterstica al trabajar con threads: la sincronizacin; esto permite, valga la redundancia, sincronizar los procesos para que trabajen de manera correcta.En esta primera entrada veremos un ejemplo de Productor-Consumidor, en el que NO se utiliza la sincronizacin, con el fin de entender mejor los problemas que se presentan cuando los subprocesos no se ponen de acuerdo.

Sintaxis y ejemplos de las diferentes formas en las que se puede programar el modificador synchronized

La forma general de un bloqueSynchronizedes:

synchronized (objeto){

//declaraciones para ser sincronizadas

}

Aquobjeto hace referencia al objeto que va a ser sincronizado. Un objeto sincronizado asegura que una llamada a unmtodo, ocurra solodespusde que el hilo que llama ha ingresado al monitor del objeto.El modificador synchronized, para qu se utiliza?, escribir un ejemplo y tratar de explicarlo

Se usa para indicar que ciertas partes del cdigo, (habitualmente, una funcin miembro) estn sincronizadas, es decir, que solamente un subproceso puede acceder a dicho mtodo a la vez.

Cundo es necesario hacer uso de la sincronizacin de hilos?, qu mecanismos (algoritmos) se pueden utilizar para la sincronizacin de hilos?

La razn ms comn para la sincronizacin es cuando dos o ms hilos necesitan acceso a un recurso compartido que slo puede ser utilizado por un hilo a la vez. Otra razn para la sincronizacin es cuando un hilo est esperando un evento causado por otro hilo. En este caso, debe de haber algn medio por el cual el primer hilo se mantenga en estado suspendido hasta que el evento ocurra.

La sincronizacin esta soportada por la palabra clavesynchronizedy por unos cuantosmtodosbien definidos que tienen todos los objetos.

Aparte del uso del modificador synchronized, que mtodos pueden ser utilizados para auxiliar en la sincronizacin de los hilos en una aplicacin?

parte del uso del modificador synchronized, que mtodos pueden ser utilizados para auxiliar en la sincronizacin de los hilos en una aplicacin? volatile es, junto con synchronized, uno de los mecanismos de sincronizacin bsicos de Java.

Se utiliza este modificador sobre los atributos de los objetos para indicar al compilador que es posible que dicho atributo vaya a ser modificado por varios threads de forma simultanea y asncrona, y que no queremos guardar una copia local del valor para cada thread a modo de cach, sino que queremos que los valores de todos los threads estn sincronizados en todo momento, asegurando as la visibilidad del valor actualizado a costa de un pequeo impacto en el rendimiento.Qu ventajas y que desventajas podemos tener al programar con hilos?

uedes dejar ejecutando tareas en el fondo.Evitas el bloqueo de un programa.Incrementas la velocidad de ejecucin.Puedes hacer programas mucho ms adecuados.La programacin esmucho ms estructurada y fcil.Qu problemas se pueden generar con el uso de hilos?

Las problemas se deben a las siguientes causas:

Complejidad: Aunque es cierto que la programacin con hilos puede proporcionar una forma ms natural de resolver los problemas, existen otras cosas que se deben tener en cuenta. La programacin con hilos es ms difcil que la clsica programacin secuencial. Por ejemplo, cuando se mantiene, depura u optimiza una aplicacin con hilos, se deben tener en cuenta la existencia de mltiples hilos de cdigo en ejecucin. Por ello generalmente es ms fcil depurar y optimizar un programa de hilo simple.

Sincronizacin: Se debe coordinar el acceso a los datos compartidos mediante bloqueos. Olvidar un bloqueo puede producir la corrupcin de los datos.

Posibilidad de deadlock: Las dependencias circulares en los bloqueos pueden originar deadlock.

Depuracin difcil, debido a las dependencias entre los datos y las dependencias de tiempo. Depurar en un sistema multiprocesador es ms complicado, ms costoso, y los errores no siempre son reproducibles. Una biblioteca de hilos puede ser til para detectar y analizar errores en un entorno uniprocesador antes de ser probada en un sistema multiprocesador. Existen dos tipos de errores, loserrores serieque pueden ocurrir en un entorno uniprocesador, y loserrores paralelosque son inherentes a una ejecucin paralela, y son difciles de detectar.

Rompen la abstraccin, lo que impide disear mdulos independientes.

Obtener un buen rendimiento es difcil. Los bloqueos demasiado simples (grano grueso) disminuyen el nivel de concurrencia, mientras que los bloqueos de grano fino son demasiado complicados. Adems la velocidad de cambio de contexto del sistema operativo influye notablemente en el rendimiento.

Soporte escaso: El cdigo es difcil de transportar a otras arquitecturas que no soportan hilos. Las libreras estndar no suelen ser hilo-seguras. Las llamadas al kernel o al sistema de gestin de ventanas pueden no estar preparadas para soportar mltiples hilos.

Disponibilidad de herramientas: Para favorecer el desarrollo de aplicaciones multihilo, la industria necesitar crear herramientas de depuracin y optimizacin ms refinadas. Sin embargo, la tecnologa de los depuradores y optimizadores es relativamente joven lo que a corto plazo supone un problema para los programadores. Un entorno de programacin multihilo debe proporcionar depuradores con soporte multihilo [CAS90]. La informacin debe ser extrada del TCB (bloque de control del hilo) y hacerla disponible al usuario. Los cambios de contexto deberan ser visibles para el usuario. Por ejemplo, cuando se va a producir un cambio de contexto, el usuario podra elegir si continua depurando despus del punto de suspensin o si cambia al contexto de otro hilo. Adems se podran presentar ventanas de depuracin separadas para cada hilo dentro de un proceso.

Utilizacin de cdigo no seguro: Se debe tener mucho cuidado a la hora de mezclar cdigo multihilo con cdigo no hilo-seguro, es decir, cdigo no preparado para ejecucin en un entorno multihilo.

Cul es la medida de tiempo utilizada en los mtodos sleep(), wait()?

un intervalo de tiempo indeterminado, a diferencia del uso de la llamada al sistema sleep, que simplemente lleva al hilo a un estado de dormido, y siempre durante un nmero de milisegundos concreto.

A qu paquete pertenece la clase Thread?

Java.lang

El paquete java.lang define una clase Thread que sirve para crear hilos.

El otro modo de crear hilos es mediante la implementacin de la interfaz Runnable.

Da un ejemplo de cmo activar un hilo

class MiThread extends Thread {

public void run() {

. . .

}Da un ejemplo de cmo podemos parar un hilo sin utilizar el mtodo stop()

Puedes usar la clase FutureTask de java.util.concurrent pasndole por el constructor un Runnable y lo puedes parar con TuFutureTask.cancel(true);

Para que es utilizado el modificador de tipo volatile

Es un modificador que aadido a una variable, advierte al compilador que esta puede ser modificada por una rutina en segundo plano (background), por una rutina de interrupcin, o por un dispositivo de entrada salida. Es decir, que puede sufrir modificaciones fuera del control del programa.

La declaracin de un objeto con este atributo, previene al compilador de hacer ninguna asuncin sobre el valor del objeto mientras se ejecutan instrucciones en las que est involucrado, advirtindolo que dicho valor puede cambiar en cualquier momento. Tambin previene al compilador de que no debe hacer de dicho objeto unavariable de registro.

Sintaxis

volatile[] [ = ];

(volatile );

volatile;

volatile;

En qu consiste el paquete java.util.concurrent?

Interfaces y clases que proporcionan un marco para el bloqueo y la espera de condiciones que es distinta de una funcin de sincronizacin y monitores.El marco permite una flexibilidad mucho mayor en el uso de las cerraduras y las condiciones, a expensas de la sintaxis ms incmodo.

Este paquete proporciona clases tiles que se utilizan comnmente para la

sincronizacin de datos. Los ms destacados son:

- Semaphore: herramienta clsica de concurrencia

- CyclicBarrier: til para programar en paralelo

- CountDownLatch: utilidad para bloquear hasta que un nmero dado de seales, eventos o condiciones se cumplan.

Qu clases e interfaces contienes para la sincronizacin de hilos?

Este paquete proporciona clases para bloquear y esperar a que se cumplan condiciones.

En qu consiste el paquete java.util.concurrent.locks?

Este paquete proporciona clases para bloquear y esperar a que se cumplan

condiciones. Permite mayor flexibilidad en el uso de bloqueos y condiciones en el coste

de una sintaxis difcil. Este paquete proporciona bloqueos de lectura y escritura.

Qu clases e interfaces contienes para la sincronizacin de hilos?

La interfaz Runnable, dado que las

interfaces representan una forma de encapsulamiento del trabajo que una clase debe realizar.

As, se utilizan para el diseo de requisitos comunes a todas las clases que se tiene previsto implementar. La interfaz define el trabajo, la funcionalidad que debe cubrirse, mientras que la clase o clases que implementan la interfaz realizan dicho trabajo (cumplen esa funcionalidad).

Todas las clases o grupos de clases que implementen una cierta interfaz debern seguir las mismas reglas de funcionamiento.

El otro mecanismo de creacin de hilos, como ya hemos dicho, consistira en la creacin previa de una subclase de la clase Thread, la cual podramos instanciar despus.

Por ejemplo,

class MiThread extends Thread {

public void run() {

...

}

}

A groso modo explicar en que consisten las siguientes clases e interfaces:

Interface Queue

Interfaz de colas

Parmetros de tipo:

E - el tipo de elementos se celebr en esta coleccin

Todos superinterfaces:

Coleccin , Iterable

Todos subinterfaces conocido:

BlockingDeque , BlockingQueue , deque

Todas las clases que implementan conocidos:

AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue

interfaz de cola pblica

extiende Coleccin

Una coleccin diseada para la celebracin de los elementos antes de su procesamiento. Adems de las operaciones bsicas Collection, colas proporcionan la insercin adicional, la extraccin, y las operaciones de inspeccin. Cada uno de estos mtodos existe en dos formas: se produce una excepcin si la operacin falla, el otro devuelve un valor especial (null o false, dependiendo de la operacin). Esta ltima forma de la operacin de insercin est diseado especficamente para su uso con las implementaciones de cola de la capacidad-restringidas; en la mayora de las implementaciones, las operaciones de insercin no pueden fallar.

Interface Blocking Queue

Interface BlockingQueue

Parmetros de tipo:

E - el tipo de elementos se celebr en esta coleccin

Todos superinterfaces:

Coleccin , Iterable, cola

Todos subinterfaces conocido:

BlockingDeque

Todas las clases que implementan conocidos:

ArrayBlockingQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue

interfaz pblica BlockingQueue

extiende cola

Una cola que, adems, apoya las operaciones que esperan a la cola para ser no vaca al recuperar un elemento, y esperar a que el espacio est disponible en la cola cuando se almacena un elemento.

BlockingQueue mtodos estn disponibles en cuatro formas, con diferentes formas de manejar las operaciones que no pueden ser satisfechas de inmediato, pero se pueden satisfacer en algn momento en el futuro: uno produce una excepcin, la segunda devuelve un valor especial (null o false, dependiendo de la funcionamiento), la tercera bloquea el subproceso actual de forma indefinida hasta que la operacin puede tener xito, y el cuarto bloques de slo un lmite de tiempo mximo dado antes de abandonar. Estos mtodos se resumen en la tabla siguiente:

A BlockingQueue no acepta elementos nulos. Implementaciones tirar NullPointerException en los intentos de aadir, poner u ofrecer un valor nulo. Un valor nulo se utiliza como valor centinela para indicar el fracaso de las operaciones electorales.

Interface Lock

Todas las clases que implementan conocidos:

ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock

Lock interfaz pblica

Implementaciones Lock proporcionan ms extensas operaciones de bloqueo que puede obtenerse utilizando mtodos y estados sincronizados. Permiten estructuracin ms flexible, puede tener propiedades muy diferentes, y puede soportar mltiples objetos de condicin asociadas.

Un bloqueo es una herramienta para controlar el acceso a un recurso compartido por varios subprocesos. Por lo general, un bloqueo proporciona acceso exclusivo a un recurso compartido: slo un hilo a la vez puede adquirir el bloqueo y todo el acceso al recurso compartido requiere que el bloqueo se adquiri en primer lugar. Sin embargo, algunas cerraduras permiten el acceso simultneo a un recurso compartido, como el bloqueo de lectura de un ReadWriteLock.

El uso de mtodos o declaraciones sincronizadas permite acceder a la pantalla de bloqueo implcito asociado a cada objeto, sino que obliga a todas las adquisiciones de bloqueo y la liberacin se produzca de una forma de bloques estructurados: cuando se adquieren varias cerraduras que debe ser puesto en libertad en el orden inverso, y todos los bloqueos deben ser liberados en el mismo mbito lxico en el que se adquirieron

Semaphore

Un Semaphore de conteo.Conceptualmente, un semforo mantiene un conjunto de permisos.Cadaadquirir ()bloquea si es necesario, hasta que el permiso est disponible, y luego se lo lleva.Cadaversin ()aade un permiso, lo que podra liberar un adquirente de bloqueo.Sin embargo, no se usan los objetos de permisos reales; elsemforoslo mantiene un recuento del nmero disponible y acta en consecuencia.

Los semforos se utilizan a menudo para restringir el nmero de hilos que pueden tener acceso a algunos recursos (fsicos o lgicos)

Barriers (clase CyclicBarrier)son tiles en programas que implican un partido de tamao fijo de temas que a veces deben esperar por los dems.La barrera se denominacclico, ya que se puede volver a utilizarse despus de que se liberen los subprocesos en espera.

ACyclicBarrieradmite una opcinRunnablemandato que se ejecuta una vez por cada punto de barrera, despus de que el ltimo hilo de la fiesta llega, pero antes de que se liberan todos los hilos.Esteefecto de barreraes til para la actualizacin de estado compartida antes que cualquiera de las partes continuar.

Executor

Proporciona funciones de ejecucin de comandos para invocar a compiladores. No se puede heredar esta clase.

Todos subinterfaces conocido:

ExecutorService, ScheduledExecutorService

Todas las clases que implementan conocidos:

AbstractExecutorService, ScheduledThreadPoolExecutor, ThreadPoolExecutor

Ejecutor interfaz pblica

Un objeto que ejecuta tareas ejecutables presentados. Esta interfaz proporciona una manera de desvincular la presentacin de tareas desde la mecnica de cmo se llevar a cabo cada tarea, incluyendo detalles de uso hilo, programacin, etc El albacea se utiliza normalmente en lugar de crear explcitamente temasFutures y Callable

Futures

Interface Future

Parmetros de tipo:

V - El tipo de resultado devuelto por el mtodo get de este futuro

Todos subinterfaces conocido:

Respuesta RunnableFuture , RunnableScheduledFuture , ScheduledFuture

Todas las clases que implementan conocidos:

FutureTask, SwingWorker

interfaz pblica Future

Un futuro representa el resultado de un clculo asincrnico. Se proporcionan mtodos para comprobar si el clculo es completa, que esperar a su finalizacin, y para recuperar el resultado de la computacin. El resultado slo puede ser recuperada mediante el mtodo de conseguir cuando el clculo se ha completado, el bloqueo si es necesario hasta que est listo. Cancelacin se realiza por el mtodo de cancelacin. Se proporcionan mtodos adicionales para determinar si la tarea se ha completado normalmente o se cancel. Una vez que el clculo se ha completado, el clculo no se puede cancelar. Si desea utilizar un futuro por el bien de cancellability pero no proporciona un resultado til, se puede declarar tipos de forma Future y devolver nulo como consecuencia de la tarea subyacente.

Callable

Interfaz invocable

Parmetros de tipo:

V - el tipo de resultado de la llamada al mtodo

Todos subinterfaces conocido:

JavaCompiler.CompilationTask

interfaz pblica rescatable

Una tarea que devuelve un resultado y puede producir una excepcin. Los implementadores definir un nico mtodo sin argumentos llamados llamada.

La interfaz invocable es similar al ejecutable, ya que ambos estn diseados para las clases cuyas instancias son potencialmente ejecutados por otro subproceso. A Runnable, sin embargo, no devuelve un resultado y no se puede lanzar una excepcin comprobada.

La clase Ejecutores contiene mtodos de utilidad para convertir de otras formas comunes de las clases se puede llamar

ExchangerClase Intercambiador

java.lang.Object

java.util.concurrent.Exchanger

Parmetros de tipo:

V - El tipo de los objetos que pueden ser intercambiados

Intercambiador clase pblica

extiende objeto

Un punto de sincronizacin en la que las discusiones pueden vincular y cambiar elementos en pares. Cada hilo presenta algn objeto en la entrada al mtodo de intercambio, coincide con un hilo de pareja, y recibe objetos de su socio en la declaracin. Un intercambiador puede ser visto como una forma bidireccional de un SynchronousQueue. Intercambiadores pueden ser tiles en aplicaciones tales como algoritmos genticos y diseos de tuberas.

Ejemplos de uso: Estos son los aspectos ms destacados de una clase que utiliza un intercambiador de cambiar amortiguadores entre los hilos de manera que el hilo de llenado del bfer consigue un recin vaciado uno cuando lo necesita, dar el relevo el llenado hasta el hilo de vaciar el buffer.