Ejemplo de Threads: escritura de la clase - PowerPoint PPT Presentation

About This Presentation
Title:

Ejemplo de Threads: escritura de la clase

Description:

Title: Fundamentos de Redes de Computadores Author: vicgaete Last modified by: nelson Created Date: 7/6/1999 7:07:35 PM Document presentation format – PowerPoint PPT presentation

Number of Views:31
Avg rating:3.0/5.0
Slides: 9
Provided by: vicg9
Category:

less

Transcript and Presenter's Notes

Title: Ejemplo de Threads: escritura de la clase


1
Ejemplo de Threads escritura de la clase
  • public class SimpleThread extends Thread
  • public SimpleThread(String str)
  • super(str)
  • public void run()
  • for (int i 0 i lt 10 i)
  • System.out.println(i " "
    getName())
  • try
  • this.sleep((int)(Math.ra
    ndom() 1000))
  • catch (InterruptedExceptio
    n e)
  • System.out.println("DONE! "
    getName())
  • El método this.sleep(milisegundos) debe ir en un
    bloque try and catch

2
Ejemplo de Threads Uso de la clase nueva
  • public class TwoThreadsTest
  • public static void main (String
    args)
  • SimpleThread t1,t2
  • t1 SimpleThread("Jamaica")
  • t2 SimpleThread("Fiji")
  • t1.start() t2.start()
  • El método start() inicia la ejecucón de un
    thread. Esto implica que se empieza a ejecutar el
    código escrito en el método run del thread.
    También existen otros métodos que se le pueden
    aplicar a un thread suspend(), resume(), stop().

3
Problemas de sincronización con Threads
  • Los threads tienen la ventaja que pueden
    compartir memoria
  • Esto también es una desventaja cuando se requiere
    algún orden en la administración de los recursos
  • Pensemos en el problema de repartir (consumir)
    números.
  • Si el productor de números está en el servidor y
    hay varios threads clientes que piden números,
    debemos tener cuidado de no repartir el mismo
    número a clientes distintos
  • Veamos el problema de la sincronización en un
    ejemplo

4
Cómo usar threads para hacer servidores
concurrentes
  • Hacer una clase Thread que tenga como variables
    de un objeto un socket y flujos de entrada y/o
    salida.
  • Programar el constructor de modo que reciba como
    parámetro un socket y haga todo lo necesario para
    dejar inicializado el ambiente para empezar a
    atender al cleinte (por ejemplo, abrir flujos de
    datos de entrada y/o salida del socket recibido)
  • Programar el método run de modo que implemente el
    protocolo necesario.
  • Programar un método main que en un ciclo infimito
    se ponga a escuchar en un port dado la llegada de
    clientes.
  • Con cada cliente nuevo crear un thread nuevo y
    pasar como parámetro el socket

5
Veamos un ejemplo
  • Primero veremos un servidor iterativo que atiende
    a clientes en un ciclo
  • La atención consiste en enviar una serie de
    números que el cliente va leyendo e imprimiendo
  • Sin cambiar ni una línea de código en el cliente,
    reeplazaremos el servidor por uno concurrente.
  • Ejercicio Copiar los archivos UnClienteQueEscribe
    .java y UnServidorQueOye.java y completar lo que
    falta
  • Ojo no hay concurrencia, ES MUY SIMPLE
  • Ponerse a Escribir !!!! (los primeros 2 grupos
    que logren comunicación de ida y vuelta tienen
    0.5 en la prueba)

6
Cuando un programa debe comportarse como cliente
y servidor a la vez el teléfono
  • Un teléfono es un cliente y un servidor a la vez
  • Se comporta como servidor cuando recibe una
    llamada
  • Se comporta como cliente cuando efectúa una
    llamada
  • El servidor crea un socket asociado a un por
    desde donde escucha si hay alguien que quiere
    llamar.
  • El cliente queda esperando que el usuario de un
    comando para llamar a algun servidor (por ejemplo
    esperar del teclado que el usuario ingrese un
    nombre de host para llamar)
  • El problema es que deben estar los 2 en el mismo
    programa usamos threads, uno para el servidor y
    otro para el cliente.
  • Ambos quedan esperando y se da curso a lo que
    pase primero.

7
Cuando un programa debe comportarse como cliente
y servidor a la vez el teléfono
  • Un teléfono es un cliente y un servidor a la vez
  • Se comporta como servidor cuando recibe una
    llamada
  • Se comporta como cliente cuando efectúa una
    llamada
  • El servidor crea un socket asociado a un por
    desde donde escucha si hay alguien que quiere
    llamar.
  • El cliente queda esperando que el usuario de un
    comando para llamar a algun servidor (por ejemplo
    esperar del teclado que el usuario ingrese un
    nombre de host para llamar)
  • El problema es que deben estar los 2 en el mismo
    programa usamos threads, uno para el servidor y
    otro para el cliente.
  • Ambos quedan esperando y se da curso a lo que
    pase primero.

8
Cuando un programa debe comportarse como cliente
y servidor a la vez el teléfono (2)
  • Otro problema no se deben aceptar peticiones de
    llamadas si es que se da curso a una llamada (se
    activa el thread del cleinte)
  • No se puede dar curso a una llamada si se atendó
    a una (se activa el thread de servidor)
  • La idea es suspender un thread cuando se activa
    el otro.
  • Para esto se necesita que ambos conozcan el otro
    thread. Al crear uno se le da un puntero al otro
    !
  • Ver programas telefono.java
  • El cliente sólo puede escribir, el servidor sólo
    puede leer, Modifíquelos !
Write a Comment
User Comments (0)
About PowerShow.com