Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Definir el concepto de hilo (thread).

Enviado por   •  21 de Febrero de 2018  •  6.562 Palabras (27 Páginas)  •  244 Visitas

Página 1 de 27

...

Planificación de la ejecución de los hilos

En programación Java, la ejecución de los hilos es apropiativa y no por asignación de cuantos de tiempo (time-sliced), con la que cada hilo recibiría una misma cantidad de tiempo de la CPU. Es un error habitual creer que apropiatiw es otra forma de decir asignación de tiempos.

El modelo de planificación apropiativa se basa en que, aunque puede haber muchos hilos ejecutables, en la práctica sólo se ejecuta uno. Este hilo se ejecuta hasta que deja de ser ejecutable o hasta que otro hilo de mayor prioridad se pone en estado ejecutable. En el último caso, el hilo de mayor prioridad se apropia del derecho de ejecución e interrumpe al de menor prioridad.

Un hilo puede dejar de ser ejecutable (es decir, quedar bloqueado) for diferentes motivos. Por ejemplo, el código del hilo puede ejecutar una llamada a Thread.sleepO para pedir al hilo que se detenga durante un determinado periodo de tiempo. También puede que el hilo tenga que esperar un recurso y no pueda continuar hasta que dicho recurso esté disponible.

Todos los hilos ejecutables se guardan en grupos formados en función de la prioridad. Cuando un hilo bloqueado se vuelve ejecutable, vuelve a colocarse en el grupo adecuado. Los hilos del grupo (no puede estar vacío) que tenga mayor prioridad reciben tiempo de la CPU.

Un objeto Thread puede pasar por diferentes estados a lo largo de su ciclo de vida, como se muestra en la Figura 15-3.

[pic 7]

Figura 15-3 Diagrama de estados fundamentales de los hilos

Aunque el hilo entre en estado ejecutable (runnable), no siempre empieza a ejecutarse de inmediato. En las máquinas con una CPU, sólo puede realizarse una acción en cada momento. En los párrafos siguientes se explica como se asignan los recursos de la CPU cuando hay varios hilos ejecutables.

Dado que los hilos de Java no se ejecutan por asignación de cuantos de tiemuo, debe asegurarse de que el código de sus hilos dé a los otros hilos la oportunidad de ejecutarse de vez en cuando. Esto puede conseguirse ejecutando la llamada sleep con diferentes intervalos, como se muestra en el Código 15-1.

Código 15-1 Ejemplo de planificación de hilos

- public class Runner implements Runnable {

- public void run() {

- while (true) {

- // hacer numerosas tareas

- // ...

- // Dar a otros hilos una oportunidad

- try {

- Thread.sleep(10);

- } catch (InterruptedException e) {

- // El periodo de espera de este hilo ha

- // sido interrumpido por otro hilo

- }

- }

- }

}

-

Hilos

CopyngM 2000 Sun Microsystems, inc Todos los derechos reservados Sun Services. Revisión G ?

Fi Código 15-1 de la página 15-7 muestra el uso del bloque try y catch. Thread.sleep() y otros métodos que detienen la ejecución de los hilos durante un tiempo pueden ser interrumpidos. Los hilos pueden llamar al método interrupt de otro hilo, lo que señala al hilo detenido con una

excepcion InterruptedExcept ion.

sleep es un método static de la clase Thread, ya que actúa sobre el hilo actual v se hace referencia a él como Thread.sleepfx). El argumento del método sleep indica la cantidad mínima de milisegundos que el hilo debe estar inactivo. 1.a ejecución del hilo no se reanuda hasta que finalice este periodo, a menos que sea interrumpido, en cuyo caso reanudará la ejecución antes.

Fin de los hilos

Cuando un hilo termina de ejecutarse y finaliza, no puede volverse a ejecutar.

Es posible detener los hilos utilizando un indicador que determina que el método run debe finalizar.

- public class Runner implements Runnable {

- prívate boolean timeToQuit=false;

3

- public void run() {

- while ( ! timeToQuit ) {

- // seguir trabajando hasta recibir la orden de salir

- }

- // dejar todo en orden antes de que termine run()

- }

10

- public void stopRunning() {

- timeToQuit=true;

- }

}

-

- public class ThreadController {

- private Runner r = new Runner O;

- private Thread t = new Thread(r);

4

- public void startThreadO {

- t.start();

- }

8

- public vnid ntopThr^/id{) {

- // unai vma ínnt.ancU d* ftunntr

- r .»tt>pRuíUunt

u )

- }

Dentro do un determinado fragmento *-% posi^U* o -- r •' * ►ncia a! hilo i t il utilizando el método estático cuirr«ntThr#ad 4* Thi.id Por ejemplo;

- publíc class NameRunner implemento R'¿nnable {

- public voíd run() {

- while (true) {

- // numerosas tareas

- } ^

- // Mostar en pantalla el nombre del hilo

-

...

Descargar como  txt (40.8 Kb)   pdf (109.5 Kb)   docx (43.4 Kb)  
Leer 26 páginas más »
Disponible sólo en Essays.club