Vous êtes sur la page 1sur 6

) Sistemas Digitales II

!rogramacin en Java"Hilos y Herencia Wilson Martnez Monta a


tiene por lo menos un /ilo. -os /ilos comparten los recursos de un proceso! inclu#endo la memoria # arc/ivos a"iertos. RESUMEN El presente artculo resume los temas estudiados de programacin en Java con referencia a Hilos y Herencia y presenta ejemplos de los mismos. Palabras ClaveJava, Hilos, Herencia. Cada /ilo es una v'a simult1nea de ejecuci n dentro del espacio de memoria del proceso. -a comunicaci n entre /ilos se puede reali0ar a trav.s del espacio de memoria $ue comparten. -a ejecuci n Multi:,ilos es esencialmente un caracter'stica de la plata%orma +ava. Toda aplicaci n tiene por los menos un /ilo! o varios si se cuentan los /ilos del ;sistema; $ue /acen cosas como la gesti n de la memoria # el manejo de se&ales. <ero desde el punto de vista del programador de la aplicaci n! se inicia con un solo /ilo! llamado el hilo principal. Este /ilo tiene la capacidad de crear su"procesos adicionales. Entonces una aplicaci n concurrente es a$uella $ue se descompone en un conjunto de procesos #=o /ilos. 4simismo una aplicaci n multi:/ilo est1 constituida por varios /ilos $ue comparten el espacio de memoria de un proceso. Independiente de la utili0aci n de los /ilos! el desarrollo de aplicaciones concurrentes involucra el uso de t.cnicas espec'%icas # la superaci n de di%icultades $ue no se presentan en la implementaci n de programas secuenciales. Creacin de Threads ,a# dos %ormas de crear nuevos T/reads. Una consiste en crear una nueva clase $ue /erede la clase java.lang.Thread # so"recargar el m.todo run() de dic/a clase. El segundo m.todo consiste en declarar una clase implementando la inter%ace java.lang.Runnable! la cual declarara el m.todo run()> posteriormente se crea un o"jeto de tipo T/read pas1ndole como argumento al constructor el o"jeto creado de la nueva clase. Ejemplo de la creaci n de un T/read derivado de la clase Thread2 Public Class EjemploThread extends Thread { //Constructor Public EjemploThread(String str){ Super(str); } // ede!inici"n de m#todo run() public $oid run(){ !or(int i%&; i'(&; i))) S*stem+out+println(,Este es el Thread -. ) get/ame());

I. INTRODUCCIN

ava es un lenguaje de programaci n de prop sito general! concurrente! orientado a o"jetos # "asado en clases $ue %ue dise&ado espec'%icamente para tener tan pocas dependencias de implementaci n como %uera posi"le. ()* II. ,I-OS En las t.cnicas de programaci n en general se "usca proveer de la capacidad de /acer varias cosas a la ve0 # no verse %or0ado a ejecutar los programas secuencialmente! o $ue por lo menos esa sea la impresi n $ue tenga el usuario %inal. En la programaci n concurrente /a# dos unidades "1sicas de ejecuci n2 los procesos # los su"procesos o /ilos. En el lenguaje de programaci n +ava la concurrencia /ace m1s re%erencia a /ilos. Dos tareas se dice $ue son concurrentes si transcurren durante el mismo intervalo de tiempo. -a programaci n concurrente es el conjunto de t.cnicas # notaciones $ue sirven para e3presar el paralelismo potencial en los programas! as' como la soluci n de pro"lemas de comunicaci n # sincroni0aci n. Proceso2 Un proceso es un programa en ejecuci n con un estado asociado. En este pueden e3istir varios /ilos de control independientes. Cada proceso ocupa espacio de memoria independiente. Hilos2 -os /ilos e3isten dentro de un proceso! todo proceso
4rt'culo entregado el )) de mar0o de 56)7 -os autores son estudiantes de Ingenier'a Electr nica en la 8undaci n Universitaria los -i"ertadores. 9ilson Mart'ne0 Monta&a

5 Sistemas Digitales II

}
<ara ejecutar este nuevo T/read se de"e crear un o"jeto de la clase EjemploThread # llamar el m.todo start()! /eredado de la superclase T/read $ue se encarga de llamar a run()2 EjemploThread miThread % EjemploThread(,1ilo de prueba.); miThread+start(); ne0

llamarse el m.todo stop() de la clase T/read aun$ue no es recomenda"le. Sincronizacin -a sincroni0aci n nace de la necesidad de evitar $ue dos o m1s T/reads traten de acceder a los mismos recursos al mismo tiempo. Tam"i.n es necesaria cuando un T/read de"e esperar a $ue est.n preparados los datos $ue le de"e suministrar otro T/read. Public s*nchroni3ed metodoSincroni3ado { //4ccediendo por ejemplo a las //$ariables de un objeto +++ +++ $oid

Ejemplo de creaci n de un T/read con el uso de la inter%ace Runnable. Public Class EjemploThread implements unnable { //Se crea un nombre String nameThread; //Constructor Public EjemploThread(String str){ nameThread % str; } // ede!inici"n de m#todo run() public $oid run(){ !or(int i%&; i'(&; i))) S*stem+out+println(,Este es el Thread -. ) get/ame());

}
-a sincroni0aci n previene las inter%erencias solamente so"re un tipo de recursos2 la memoria reservada para un o"jeto. Prioridad <ara garanti0ar la correcta ejecuci n de un programa se esta"lecen prioridades en los T/reads de %orma $ue se produ0ca un reparto m1s e%iciente de los recursos disponi"les. 4l crearse un nuevo T/read este /eredara la prioridad del T/read desde el $ue /a sido iniciali0ado. -as prioridades vienen de%inidas por varia"les miem"ro de la clase T/read con valores enteros2 M4BC<RIORITD )6 MINC<RIORITD ) NORMC<RIORITD E Mtodos de la clase Thread. getT/readFroup?@ Retorna el grupo de /ilo a $ue pertenece el /ilo actual. interrupt?@ Interrumpe el /ilo. interrupted?@ C/e$uea si el /ilo actual se /a interrumpido. is4live?@ C/e$uea si el /ilo esta vivo. isDaemon?@

}
<ara ejecutar este nuevo T/read de crea un nuevo T/read mediante el segundo procedimiento2 EjemploThread p % ne0 EjemploThread(,1ilo de prueba.); //Se crea un objeto de la clase Thread //pas2ndolo el objeto unnable como //argumento Thread miThread % ne0 Thread(p); //Se arranca el objeto de la clase Thread miThread+start();

Ciclo de vida de un Thread


Un T/read puede presentar cuatro estados distintos2

Nuevo ?New@2 El T/read /a sido creado pero no iniciali0ado! es decir! no se /a ejecutado aun el m.todo start(). Ejecuta"le ?Runnable@2 El T/read puede estar ejecut1ndose siempre # cuando se le /a#a asignado u determinado tiempo de C<U. Alo$ueado ?Blocked o Not Runnable@2 El T/read podr'a estar ejecut1ndose! pero /a# alguna actividad interna su#a impidi.ndolo. Muerto ? ead@2 -a %orma /a"itual e $ue un T/read muera es %inali0ando el m.todo run(). Tam"i.n puede

I Sistemas Digitales II C/e$uea si el /ilo es un /ilo de servicio a otros. isInterrupted?@ C/e$uea si el /ilo /a sido interrumpido. join?@ Espera a $ue el /ilo se muera. join?long millis@ Espera /asta millis milisegundos para $ue el /ilo muera. run?@ Constitu#e el cuerpo de una tarea o /ilo. Es llamado por el m.todo start?@! despues $ue la tarea apropiada del sistema se /a#a iniciali0ado. -a tarea actual se detendr1 cada ve0 $ue run?@ devuelva el control. Este es el Gnico m.todo de la inter%a0 Runna"le. setDaemon?"oolean on@ Marca este /ilo como un /ilo de servi iusuario o /ilo demonio. setName?String name@ <ermite asignarle a la tarea un nom"re con el cual se la puede identi%icar.. set<riorit#?int neH<riorit#@ Cam"ia la prioridad de la tarea! entre los valores ) # )6. sleep?long millis@ <rovoca $ue el int.rprete de +ava ponga la tarea a dormir durante un tiempo indicado en milisegundos! transcurrido dic/o tiempo la tarea estar1 disponi"le para ejecuci n. start?@ -e indica al interprete de +ava $ue cree un conte3to de ejecuci n de una tarea e inicie su ejecuci n. 4cto seguido se invoca el m.todo run?@ de esta tarea en el nuevo conte3to de ejecuci n. De"e tenerse cuidado de llamar a start?@ no m1s de una ve0 para una tarea determinada. toString?@ Retorna la cadena $ue representa el /ilo! $ue inclu#e nom"re! prioridad # grupo del /ilo. #ield?@ ,ace $ue el interprete detenga temporalmente la ejecuci n del o"jeto del /ilo # permita $ue el siguiente /ilo disponi"le se ejecute III. ,ERENCI4 ,a# clases $ue pueden compartir gran parte de sus caracter'sticas. -a /erencia es un mecanismo $ue permite reutili0ar clases2 lo $ue se "usca es crear una nueva clase $ue e3tiende la %uncionalidad de una clase e3istente sin $ue sea necesario reescri"ir el c digo asociado a esta Gltima. ,erencia /ace re%erencia a la posi"ilidad de de crear nuevas clases a partir de clases #a e3istentes! estas nuevas clases tendr1n todos los atri"utos # los m.todos de su superclase o clase padre! adem1s de $ue se le podr1n incluir otros atri"utos # m.todos propios. Superclase: Es la clase a partir de la cual se crea o deriva una nueva clase. Una clase /ija /ereda autom1ticamente los atri"utos # m.todos de la clase padre. Subclase2 Es la clase $ue se deriva a partir de otra. ,ereda autom1ticamente los atri"utos # m.todos de su superclase. <uede pensarse como la especiali0aci n de otra clase. -a su"clase admite la de%inici n de nuevos atri"utos o m.todos para aumentar la especiali0aci n de la clase. Ejemplos2

8igura )Ejemplo de Superclase # Su"clases.

7 Sistemas Digitales II -os campos /eredados pueden ser usados directamente as' como cual$uier otro campo. <ueden ser declarados campos en la su"clase con el mismo nom"re de los $ue aparen en la superclase. <uede declarar nuevos campos en la su"clase $ue no est1n en la superclase. -os m.todos /eredados se pueden utili0ar directamente como son. <uede declarar nuevos m.todos en la su"clase $ue no est1n en la superclase. <uede escri"irse un constructor de una su"clase $ue invo$ue al constructor de la superclase de manera impl'cita o /aciendo uso de la pala"ra reservada super.

8igura 5 Ejemplo de Superclase # Su"clases

<ara tener en cuenta... El principio de sustituci n de -isNov2 ODe"e ser posi"le utili0ar cual$uier o"jeto instancia de una su"clase en el lugar de cual$uier o"jeto instancia de su superclase sin $ue la sem1ntica del programa escrito en los t.rminos de la superclase se vea a%ectadoP So"recarga de m.todos2 No es lo mismo polimor%ismo $ue so"recarga de m.todos! es decir distintos m.todos con el mismo nom"re pero di%erentes par1metros. 8inalmente en la programaci n en +ava usando la pala"ra reservada "#nal se puede2 Evitar $ue un m.todo se pueda re:de%inir en una su"clase. Evitar $ue se pueda crear su"clases de una clase dada. IQ. E+EM<-O ,I-OS En cada uno de ellos se puede o"servar2

Una clase se puede relacionar con otra mediante cola"oraci n! es decir! cuando una clase contiene un o"jeto de otra clase como atri"uto. Si este es el caso no se debe implementar la herencia. <ara implementar el mecanismo de /erencia para una su"clase se /ace uso de la pala"ra reservada e!tends. Class subclase extends superclase { //nue$os campos * m#todos 5ue //de!inen una nue$a subclase //ir6an a5u6

}
<ara acceder a miem"ros de la superclase desde la su"clase se /ace uso de l a pala"ra reservada super. Feneralmente! en un constructor! lo primero $ue se encuentra es una llamada al constructor de la clase padre con super ?J@. Si no se pone nada! se llama al constructor por de%ecto de la superclase antes de ejecutar el constructor de la su"clase. 4l tra"ajar el mecanismo de /erencia en java es posi"le $ue se $uiera re$uiera re:de%inir m.todos! lo anterior para $ue aun cuando la su"clase /ereda las operaciones de su superclase tenga la posi"ilidad de modi%icar localmente el comportamiento de dic/as operaciones o en otras pala"ras re de%inir el m.todo. El polimor%ismo es entonces $ue al re:de%inir m.todos! o"jetos de di%erentes tipos pueden responder de %orma di%erente a la misma llamada! de esta %orma se puede escri"ir c digo de %orma gen.rica sin preocuparse del m.todo concreto $ue se ejecutara en cada momento. KLu. puedo /acer en una su"claseM

-a clase T/read est1 en el pacNage java.lang. <or tanto no es necesario el import. El constructor pu"lic T/read?String str@ reci"ie un par1metro $ue es la identi%icaci n del T/read. El m.todo run contiene el "lo$ue de ejecuci n del T/read. Dentro de .l! el m.todo getName?@ devuelve el nom"re del T/read ?el $ue se /a pasado como argumento al constructor@. El m.todo main crea dos o"jetos de clase T/readEjemplo # los inicia con la llamada al m.todo start?@. ?el cual inicia el nuevo t/read # llama al m.todo run?@ @.

E Sistemas Digitales II O"serva en la salida el primer mensaje! de %inali0aci n del t/read main. -a ejecuci n de los t/reads es as'ncrona. Reali0a la llamada al m.todo start?@! .ste le devuelve control # continua su ejecuci n! independiente de los otros t/reads. En la salida los mensajes de un t/read # otro se van me0clando. -a m1$uina virtual asigna tiempos a cada t/read.

Q. E+EM<-O ,ERENCI4 Ejemplo de ,erencia en operaciones aritm.ticas2 Implementar dos clases para operar Suma # Resta. Cada clase tiene como atri"uto valor)! valor5 # resultado. -os m.todos a de%inir son cargar) ?$ue iniciali0a el atri"uto valor)@! carga5 ?$ue iniciali0a el atri"uto valor5@! operar ?$ue en el caso de la clase ;Suma; suma los dos atri"utos # en el caso de la clase ;Resta; /ace la di%erencia entre valor) # valor5! # otro m.todo mostrarResultado. 4l anali0ar am"as clases se encuentra $ue muc/os atri"utos # m.todos son id.nticos. En estos caso es mas conveniente de%inir una clase padre $ue agrupe dic/os atri"utos # responsa"ilidades comunes.

U Sistemas Digitales II QI. <RODECTOS 4NDROID IEEE Sevin Aenton! -. +ean Camp! Qai"/av Farg! Stud in! the "##ectiveness o# $ndroid $pplication Permissions %e&uests Nic/olas Mul/ern! Neil McCa%%re#! Nic/olas Aeretta! Eugene C/a"ot </D! Ding Sun </D! 'esi!nin! $ndroid $pplications usin! (oice Controlled Commands 4mit Sing/ai! +o# Aose) %educin! Po*er Consumption in +raphic ,ntensive $ndroid $pplications. 4"dulla/ 40%ar! Sim:SHang Ra#mond C/oo! -in -iu! $ stud o# ten popular $ndroid mobile (o,P applications: $re the communications encr pted,ossain S/a/riar! Sara/ Nort/! and EdHard MaHangi! Testin! o# Memor .ea/ in $ndroid $pplications Tanuj s. Ro/anNar! RaNes/ A/ujade! 4mit Sin/al! A/upendra Qerma) $ %evie*: %emote 0ile Mana!er #or $ndroid Plat#orm usin! 0TP1$ndroid RE8ERENCI4S
()* (5* /ttp2==es.HiNipedia.org=HiNi=+avaC?lenguajeCdeCprogramaciTCITAIn@ /ttp2==java#a.com.ar=

Ejemplo de /erencia en o"jetos a personas2 Con%eccionar una clase <ersona $ue tenga como atri"utos el nom"re # la edad. De%inir como responsa"ilidades un m.todo $ue cargue los datos personales # otro $ue los imprima. <lantear una segunda clase Empleado $ue /erede de la clase <ersona. 4&adir un atri"uto sueldo # los m.todos de cargar el sueldo e imprimir su sueldo. De%inir un o"jeto de la clase <ersona # llamar a sus m.todos. Tam"i.n crear un o"jeto de la clase Empleado # llamar a sus m.todos.

Ejemplo de /erencia en o"jetos a personas2 Con%eccionar una clase Socio $ue tenga como atri"utos el nom"re # la antigRedad. De%inir como responsa"ilidades un m.todo $ue cargue los datos # otro $ue los imprima.

Vous aimerez peut-être aussi