Threads in java ( multihilos en Java )

in #spanish7 years ago (edited)
Una instancia de hilo es solo un objeto, al igual que cualquier objeto en java, sean variables métodos, viven y mueren en el Heap, sin embargo, un hilo de ejecución es un proceso individual (un proceso ligero) Lightweigh process, que tiene su propia pila de llamadas, en java hay un hilo por pila de llamadas. Cuando la JMV ejecuta una aplicación java, está ejecutando esencialmente un hilo, y el método main que la JMV ejecuta es un hilo, una aplicación java puede ser mono-hilo, o multi-hilo. En una aplicación de un solo hilo, el método main que la JVM ejecuta no expande otros hijos. Estos hijos correrán en paralelo al hilo ejecutando en el método main. Cada hilo hijo puede estar realizando una tarea diferente.

Procesos e hilos

Un sistema operativo como Windows permite ejecutar muchos procesos simultáneamente, por ejemplo se puede navegar en internet con un navegador web, abrir un documento en Word, ejecutar el reproductor de música de Windows, y mantener una conversación con un amigo al mismo tiempo, a esto se le llama multitarea.

Tipos de Hilos

Existen 2 tipos de hilos:

  • Hilos Usuario
  • Hilos Demonios
  • Hilos Usuario

    Los hilos creados por usuarios (programadores) se llaman hilos usuarios. Los hilos usuario se ejecutan en primer plano. La JVM no finalizara cuando un hilo usuario este todavía corriendo. Sin embargo cuando todos los hilos usuarios han finalizado su ejecución, la JVM terminara todos los hilos demonios, incluyendo el recolector de basura, y terminara.

    El hilo principal main es un hilo de usuario.

    Hilos Demonios

    La mayoría de estos hilos demonios son creados por la JVM, estos son creados para tareas como recolección de basura y la implementación AWT. Ellos generalmente se ejecutan en segundo plano. Son creados para dar servicios a los hilos usuarios.

    Se puede utilizar el método isDaemon() para revisar si un hilo en particular es un hilo demonio o no.

    Ciclo de vida de los Hilos

    Un hilo se crea y finalmente se termina, un hilo puede pasar a través de varios estados entre se creación y destrucción.

    Un hilo se crea a partir de una subclase Thread, una instancia de Java.Lang.Thread, como también es posible crear una clase hilo usuario implementando la interfaz Runnable.


    A partir de la creación de un hilo, se dice que está en el estado “nuevo”, en este momento el hilo no se está ejecutando, cuando se invoca el método start() el hilo cambia a estado “ejecutable” esto indica que el hilo está vivo y listo para ser ejecutado.

    El hilo cambia de estado ejecutable a no ejecutable cuando ocurre uno de los siguientes eventos:

  • Cuando está en espera que se complete una operación E/S.
  • Cuando está en hibernación por haber invocado al método sleep().
  • Cuando el método wait() se ha invocado.
  • Cuando el hilo está suspendido por haber invocado al método suspend().
  • Como crear Hilos

    Existen 2 formas de crear hilos en java:

  • Heredando de la clase Thread, y sobrescribir su método run()
  • Implementando la interfaz Runnable proporcionando la implementación solo para su método run().
  • Sincronización de Hilos

    Un recurso crítico es aquel que puede ser usado solo por un usuario a la vez, si varios usuarios acceden al recurso crítico simultáneamente, se puede llegar a un estado inconsistente. Cuando varios hilos en paralelo compiten por un recurso crítico compartido, debe haber un proceso para asegurar que este recurso será usado solo por un hilo a la vez., este proceso se llama sincronización.

    Condición de carrera

    Esta se define como el comportamiento irregular causado por una dependencia inesperada con relación a la ocurrencia relativa en el tiempo de los eventos.

    En otras palabras, este comportamiento inesperado ocurre cuando un programador asume incorrectamente que un evento en particular ocurrirá siempre antes que otro.

    próximo post tendremos códigos de ejemplo y explicación

    Gracias a todos por leer…



    Sort:  

    You got a 1.97% upvote from @upmewhale courtesy of @neliobatis! Earn 90% daily earning payout by delegating SP to @upmewhale.

    Congratulations! This post has been upvoted from the communal account, @minnowsupport, by neliobatis from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

    If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
    Be sure to leave at least 50SP undelegated on your account.