10.07.2015 Views

7. Hilos Objetivos Este capítulo cubre los siguientes aspectos, de los ...

7. Hilos Objetivos Este capítulo cubre los siguientes aspectos, de los ...

7. Hilos Objetivos Este capítulo cubre los siguientes aspectos, de los ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3. t.start();Esta sección ha presentado dos estrategias para construir hi<strong>los</strong>.Superficialmente, la única diferencia entre estas dos estrategias es laubicación <strong>de</strong>l método run(). La segunda estrategia es quizás un poco mascomplicada que en el caso <strong>de</strong> <strong>los</strong> ejemp<strong>los</strong> sencil<strong>los</strong> que hemos consi<strong>de</strong>rado.Sin embargo, hay muy buenas razones por la que usted <strong>de</strong>bería hacer unesfuerzo extra.El método run() , como cualquier otro método miembro, tiene permiso <strong>de</strong>accesar <strong>los</strong> datos privados, y llamar <strong>los</strong> métodos privados, <strong>de</strong> la clase <strong>de</strong> lacual es miembro. Colocando run() en una subclase <strong>de</strong>l Thread principalsignifica que el método no pue<strong>de</strong> obtener las características que estenecesita (o no pue<strong>de</strong> obtener estas características <strong>de</strong> una manerarazonable).Otra razón que le podría persuadir para implementar sus hi<strong>los</strong> usandoRunnable mejor que hacer una subclase Thread es la únicaimplementación <strong>de</strong> la regla <strong>de</strong> herencia. Si usted escribe una subclase <strong>de</strong>Thread, entonces esta no pue<strong>de</strong> ser una subclase <strong>de</strong> cualquier otra.Mientras que si usa Runnable, usted pue<strong>de</strong> hacer subclases <strong>de</strong> cualquierotra clase padre que elija. De esta manera implementar Runnable es muchomas aplicable generalmente, esto podría tener mas sentido si lo tomaracomo habito, mejor que complicar su código con hi<strong>los</strong> creados en diferentesformas en diferentes lugares. Finalmente, <strong>de</strong>s<strong>de</strong> un punto <strong>de</strong> vista orientadoa objetos, la "thread-iness" <strong>de</strong> una clase es usualmente periférica para lanaturaleza esencial <strong>de</strong> cualquiera que usted este creando, y por lo tantohacer una subclase Thread, la cual dice en efecto "Esta clase 'es un hilo" esprobablemente una elección <strong>de</strong> diseño inapropiada. Usando Runnable, elcual dice "esta clase esta asociada con un hilo," tiene mas sentido.Para resumir, hay dos enfoques para especificar cual método run() seráejecutado por un hilo:• Subclase Thread. Define su método run() en la subclase.• Escribe una clase que implementa Runnable. Define su métodorun() en la clase. Pasa una instancia <strong>de</strong> la clase <strong>de</strong>ntro <strong>de</strong> su llamadaal constructor Thread.Cuando finaliza una EjecuciónCuando el método run() retorna, el hilo ha finalizado su tarea y esconsi<strong>de</strong>rado muerto. No hay forma fuera <strong>de</strong> este estado. Una vez un hilo estamuerto, este no podría inicializarce <strong>de</strong> nuevo; si usted quiere que la tarea <strong>de</strong>lhilo sea ejecutada <strong>de</strong> nuevo, usted tiene que construir e inicializar unanueva instancia <strong>de</strong>l hilo. El hilo muerto está listo para existir; este es unobjeto como cualquier otro objeto, y usted pue<strong>de</strong> aun accesar sus datos y

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!