Anuncios

Bienvenidos sean a este post, Java es un lenguaje de programacion multithreading (es decir multiprocesos) lo cual nos permitira crear programas que podran corrar multiples procesos al mismo tiempo, un programa de este estilo puede contener dos o mas partes que corren simultaneamente y cada parte corre tareas distintas permitiendo un uso optimo de tu equipo si posee mas de una CPU.

Anuncios

Por definicion, la multitareas (multitasking) se da cuando multiples procesos comparten recursos de procesamiento en comun como el caso de una CPU, multi-threading expande la idea de multitasking dentro de una aplicacion porque nos permite subdividir operaciones especificas dentro de una aplicacion simple en diversos procesos, cada uno de estos procesos pueden correr en paralelo, el S.O divide los tiempos de procesamiento no solamente entre aplicaciones sino entre los procesos de las aplicaciones, este tipo de procesamiento te permite escribir en una forma donde multiples actividades pueden proceder simultaneamente de una misma aplicacion, pasemos a nuestra siguiente explicacion que son los ciclos de vida de un proceso.

Anuncios

En el ciclo de vida de un proceso va a traves de varias instancias, por ejemplo un proceso nace, inicia, corre y muere, a continuacion enlistaremos las instancias de un ciclo de vida:

  • New, un nuevo proceso comienza su ciclo de vida con el estado new, permanece en este estado hasta que el proceso inicia, tambien se lo puede conocer como estado de nacimiento.
  • Runnable, cuando es iniciado el proceso se convierte en este estado, un proceso en este estado se considera que esta ejecutando su tarea
  • Waiting, en algunas ocasiones un proceso pasa al estado waiting mientras el proceso espera por otro para ejecutar otra tarea, este vuelve a su estado anterior solamente si otro proceso notifica al estado actual para continuar su ejecucion
  • Timed Waiting, un proceso en estado Runnable puede pasar a Waiting por una determinada cantidad de tiempo y una vez pasado este tiempo vuelve al estado Runnable
  • Terminated (Muerto), se entra en este estado cuando un proceso completa su tarea o es terminado
Anuncios

Cada proceso tiene su prioridad que ayuda al S.O. a determinar el orden en que los procesos seran organizados, las prioridades tienen el siguiente orden:

  • MIN_PRIORITY, tiene una constante de 1
  • NORM_PRIORITY, tiene una constante de 5 (el mas habitual)
  • MAX_PRIORITY, tiene una constante de 10
Anuncios

Procesos con una prioridad mas alta son mas importantes para un programa y deberian ubicar un tiempo de procesador antes que los procesos de baja prioridad, sin embargo esto no garantiza el orden en el cual los procesos se ejecutaran ya que son dependientes de la plataforma, a continuacion hablaremos sobre algunos de los metodos disponibles:

  • public void start(), inicia el proceso en un camino separado de ejecucion, luego invoca a run() en el objeto de tipo Thread
  • public void run(), si este objeto fue instanciado usando destino Runnable separado, el metodo es invocado en ese objeto Runnable
  • public final void setName(String nombre), cambia el nombre del objeto Thread y tambien existe un metodo getName() para recuperar dicho nombre
  • public final void setPriority(int prioridad), setea la prioridad del objeto Thread y el valor puede ser entre 1 y 10
  • public final void setDaemon(boolean var), un parametro de tipo verdadero (true) denota que el objeto sera un proceso de tipo daemon, en windows puede considerarse servicio
  • public final void join(long miliseg), el actual proceso invoca este metodo en un segundo proceso el cual bloquea el actual proceso hasta que termina o pasaron los milisegundos informados
  • public void interrupt(), interrumpe el proceso, provocando que cualquier otro proceso bloqueado por este pueda continuar
  • public final boolean isAlive(), devuelve verdadero (true) si el proceso sigue vivo, lo cual es en cualquier entre el inicio del proceso y la finalizacion del mismo
Anuncios

Los metodos visto anteriormente son invocados para un objeto de tipo Thread en particular, los siguientes metodos que veremos son de tipo static y cualquiera de estos metodos realiza la accion en el proceso que esta corriendo actualmente:

  • public static void yield(), hace que el subproceso actualmente en ejecución ceda a otros subprocesos de la misma prioridad que están esperando para ser programados.
  • public static void sleep(long miliseg), hace que el proceso actual se bloquee por al menos la cantidad de milisegundos informada
  • public static boolean holdsLock(Object x), devuelve verdadero si proceso actual mantiene el bloqueo sobre el objeto informado
  • public static Thread currentThread(), devuelve una referencia al proceso que esta corriendo actualmente, el cual es el proceso que invoca este metodo
  • public static void dumpStack(), imprime un vuelco de la pila (stack) para el proceso que esta actualmente corriendo, su mayor utilidad es para hacer una depuracion de aplicaciones multithreading
Anuncios

Hasta aqui hemos visto una introduccion al mundo de multithreading, en el proximo post veremos como extender clases y algunos ejemplos aplicando lo visto en el post de hoy.

Anuncios

En resumen, hoy hemos visto una introduccion a multithreading, hemos visto los posibles estados que pueden tener, algunos metodos disponibles en el objeto creado y algunos metodos vistos de tipos static, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00