Ejemplo real sobre thread

Iniciado por bash, 13 Diciembre 2016, 17:31 PM

0 Miembros y 1 Visitante están viendo este tema.

bash

Buenas a todos de nuevo!!

ahora estoy tratando de enteder los hilos de java , he leido un par de escritos y todos con el mismio esquema de contar numeros hasta 10 y cosas asi ,si es posible alguien me podria mostrar un ejemplo de uso diario de los hilos.  gracias de antemano.
gracias por responder mis dudas

kingcreek

Entendiendo para que sirven puedes implementar una aplicacion real.
Sin mucho tecnicismo un thread sirve para ejecutar varios procesos a la vez reduciendo el tiempo de la ejecucion total, o cargar en ellos codigos de largo trabajo sin bloquear la UI del programa.

Por ejemplo, tienes un programa que ejecute una funcion pesada que tarda 20 segundos en realizarse y otra de 15 segundos. El total de ejecucion sin hilos es de 20 + 15 segundos y hasta que este no termine, la interfaz estara "congelada" (dando la impresion de que el programa deja de funcionar de cara al usuario final), ademas de que hasta que no termine dicha funcion, no podras realizar nada mas.

Para arreglar esto, se usan hilos, puedes probarlo tu mismo haciendo este sencillo ejemplo.

Código (java) [Seleccionar]

for(int i = 0; i <= 9999999; i++)
{
    System.out.print("Numero " + i);
}


Si ejecutas ese codigo, hasta que no terminase el bucle no podrias seguir usando la aplicacion, se quedara ejecutandolo hasta que termine.
Ahora si lo ejecutas en un hilo:

Código (java) [Seleccionar]

Thread thread = new Thread(){
    public void run(){
      for(int i = 0; i <= 9999999; i++)
      {
          System.out.print("Numero " + i);
      }
    }
  }

  thread.start();


De esa manera veras que sigue ejecutando el codigo del bucle sin congelar la UI permitiendo por ende, que puedas realizar mas tareas simultaneamente.

bash

Excelente ejemplo . entiendo eso , es igual con los Socket y Base de datos usando JDBC al parecer un hilo va bien con la GUI pero seria igual para otras herramientas ?

y supong que ese thread.start() llama automaticamente this.run cierto?  y lo puedo llamar donde yo desee?
gracias por responder mis dudas

kingcreek

Si puedes llamarlo en cualquier momento.
Para otras herramientas que no usen UI sirve de igual manera.
Como ejemplo un poco cutre, imaginate que tienes una aplicacion que imprime por consola 2 operaciones matematicas, la primera tiene un tiempo de 20 segundos, la segunda de 30.
Si no usas hilo, la aplicacion tardara 50 segundos en haber mostrado el resultado de ambas operaciones.
Si colocas una de ellas en un hilo, y otra sin el, o incluso ambas en un hilo, ambas operaciones empezaran a realizarse a la vez por lo que tras 20 segundos te imprimira el primer resultado y 10 segundos mas tarde, o sea 30 segundos desde el inicio de esas operaciones te retornara el segundo resultado, habras ahorrado 20 segundos de ejecucion.
A grandes rasgos podrias aplicarlo para cosas asi.