Professional Documents
Culture Documents
proporcionan un ser!icio b"sico a un pro#rama o pro#ramas cuando la acti!idad de la m"quina es reducida$ Los hilos demonio son %tiles cuando un hilo debe ejecutarse en se#undo plano durante lar#os per&odos de tiempo$'n ejemplo de hilo demonio que est" ejecut"ndose continuamente es el recolector de basura (garbage collector)$ Este hilo, proporcionado por la M"quina *irtual +a!a, comprueba las !ariables de los pro#ramas a las que no se accede nunca libera estos recursos, de!ol!indolos al sistema$ 'n hilo puede ,ijar su indicador de demonio pasando un !alor true al mtodo setDaemon()$ Si se pasa ,alse a este mtodo, el hilo de ejecucin ser" de!uelto por el sistema como un hilo de usuario$ No obstante, esto %ltimo debe reali-arse antes de que se arranque el hilo de ejecucin (start())$ Si se quiere saber si un hilo es un hilo demonio, se utili-ar" el mtodo isDaemon()$
..Demonios$ja!a import ja!a$io$/0 class Demonio e1tends 2hread3 pri!ate static ,inal int 24M4NIO 5 670 pri!ate 2hread89 t 5 ne: 2hread824M4NIO90 public Demonio()3 setDaemon(true)0 start()0 ; public !oid run()3 ,or(int i 5 70 i<24M4NIO0 i==)3 t8i95 ne: EnjendrarDemonio(i)0 ; ,or(int i570 i<24M4NIO0 i==)3 S stem$out$println(>t8> = i = >9$isDaemon() 5 > = t8i9$isDaemon() )0 ; :hile(true) ield()0 ; ; class EnjendrarDemonio e1tends 2hread3 public EnjendrarDemonio(int i)3 S stem$out$println(>Enjendrando demonio > = i )0 start()0 ; public !oid run()3 :hile (true) ield()0 ; ; public class Demonios3 public static !oid main(Strin#89 ar#s) thro:s IOE1ception3 2hread d 5 ne: Demonio()0 S stem$out$println(>d$isDaemon() 5 > = d$isDaemon() )0 S stem$out$println(>presione cualquier tecla para terminar>)0 S stem$in$read()0 ; ;
Cambio de Contexto
Si e1iste una interrupcin pendiente es necesario? Sal!ar el conte1to (@A, re#istros del procesador, in,ormacin de la pila) del pro#rama en ejecucin$ @oner en el @A la direccin del pro#rama de tratamiento de la interrupcin, que suele constar de unas pocas tareas b"sicas$ 'na pre#unta que puede plantearse es? Bqu es lo que constitu e el conte1to que se debe sal!arC La respuesta es que se debe incluir in,ormacin que pueda ser necesaria para reanudar el pro#rama interrumpido$ 4s& pues, debe #uardarse la parte del bloque de control del proceso denominada in,ormacin de estado del procesador$ Esto inclu e al contador de pro#rama, otros re#istros del procesador la in,ormacin de la pila$ BSe tiene que hacer al#o m"sC Ello depender" de lo que ocurra a continuacin$ La rutina de tratamiento de la interrupcin es normalmente un pro#rama corto que lle!a a cabo unas pocas tareas b"sicas relacionadas con una interrupcin$ @or ejemplo, se marca el indicador que seDala la presencia de una interrupcin, puede en!iar un acuse de recibo a la entidad que produjo la interrupcin (como un mdulo de E.S) puede hacer al#unas tareas b"sicas relacionadas con los e,ectos del suceso que caus la interrupcin$ @or ejemplo, si la interrupcin est" relacionada con un suceso de E.S, el #estor de interrupciones comprobar" condiciones de error$ Si se ha producido un error, la rutina de tratamiento puede en!iar una seDal al proceso que solicit ori#inalmente la operacin de E.S$ BHa que hacer al#o m"sC @ues depende de si la interrupcin !a a !enir se#uida de un cambio de proceso o no$ La ocurrencia de una interrupcin no siempre causa el cambio de proceso$ Es posible que despus de que el #estor de interrupciones se ha a ejecutado, el proceso que estaba ejecut"ndose reanude su ejecucin$ En tal caso, tan slo ha que #uardar la in,ormacin de estado del procesador restaurarla para que pueda reanudarse correctamente el proceso interrumpido (estas ,unciones son reali-adas en hardware)$ @or tanto, el cambio de conte1to es un concepto distinto al cambio de un proceso$ @uede ocurrir un cambio de conte1to sin cambiar el estado del proceso que est" actualmente en estado de ejecucin$ En tal caso, sal!ar el conte1to restaurarlo posteriormente in!olucra un pequeDo coste e1tra$ Sin embar#o, si el proceso que estaba ejecut"ndose tiene que pasar a otro estado (listo o bloqueado), el sistema operati!o tiene que lle!ar a cabo cambios substanciales en su entorno( conte1to )$ Los pasos in!olucrados en un cambio completo de proceso son los si#uientes? 6$Sal!ar el conte1to del procesador, inclu endo el contador de pro#rama otros re#istros$
E$4ctuali-ar el @AF que estaba en estado de ejecucin$ Esto implica cambiar el estado del proceso a al#uno de los otros estados (listo, bloqueado, suspendidoGlisto)$ 2ambin se tienen que actuali-ar otros campos, como uno en el que se #uarde la ra-n por la que se abandona el estado de ejecucin otros con in,ormacin de contabilidad$ H$Mo!er el @AF a la cola apropiada (listos, bloqueados por el suceso i, suspendidoGlisto)$
I$Seleccionar otro proceso para ejecucin (como !eremos en el tema de Planificacin de Procesos)$ J$4ctuali-ar el @AF seleccionado$ Aambiar, por ejemplo, su estado a Ken ejecucinL$ M$4ctuali-ar las estructuras de datos de #estin de la memoria$ Esto puede hacer ,alta dependiendo de cmo se #estione la traduccin de direcciones (lo dejaremos para los temas sobre memoria)$Nestaurar el conte1to del procesador a aqul que e1ist&a en el momento en el que el proceso seleccionado dej por %ltima !e- el estado de en ejecucin, car#ando los !alores pre!ios del contador de pro#rama de otros re#istros$ 4s& pues, el cambio de proceso, que implica un cambio de conte1to, requiere un es,uer-o considerablemente superior al de un cambio de conte1to$
El mtodo isAlive()
El interfa de pro!ramacin de la clase Thread inclu"e el mtodo isAlive(), que devuelve true si el hilo ha sido arrancado (con start()) " no ha sido detenido (con stop()). *or ello, si el mtodo isAlive() devuelve false, sabemos que estamos ante un Nuevo Thread o ante un thread Muerto. +i devuelve true, se sabe que el hilo se encuentra en estado Ejecutable o Parado. ,o se puede diferenciar entre Nuevo Thread " Muerto, ni entre un hilo Ejecutable o Parado.
Prioridades de hilo
El intrprete de +a!a utili-a prioridades para determinar cmo debe comportarse cada hilo con respecto a los dem"s$ Las prioridades de hilo son !alores entre 6 67 que indican la prioridad relati!a de un hilo con respecto a los dem"s$
wait: le indica al hilo en curso que abandone el monitor se !a a a dormir hasta que otro hilo entre en el mismo monitor llame a noti, $ notify: despierta al primer hilo que reali- una llamada a :ait sobre el mismo objeto$ notifyAll : despierta todos los hilos que reali-aron una llamada a :ait sobre el mismo objeto$ El hilo con ma or prioridad de los despertados es el primero en ejecutarse$