Foros del Web » Programación para mayores de 30 ;) » Java »

Servicio Web y Thread(Hilos)

Estas en el tema de Servicio Web y Thread(Hilos) en el foro de Java en Foros del Web. Buenas: Queria sabes si se puede hacer que un servicio web tenga hilos dentro para algunas tareas y uno de los hilos haga el return(que ...
  #1 (permalink)  
Antiguo 15/04/2007, 17:06
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Servicio Web y Thread(Hilos)

Buenas:

Queria sabes si se puede hacer que un servicio web tenga hilos dentro para algunas tareas y uno de los hilos haga el return(que será el response al cliente)??

Es posible esto???

por ejemplo:

El modo clasico:

Código PHP:
public class Math {
    public 
float add(float afloat b) {
        return 
a+b;
    }

con hilos:

Código PHP:
public class Math {
    public 
float add(float afloat b) {
          
// Create and start the thread
    
Thread thread = new BasicThread1(a,b);
    
thread.start();
    }
}

class 
BasicThread1 extends Thread {
        
// This method is called when the thread runs
        
int a;
        
int b;
        public 
BasicThread1(int a,int b){
            
this.a;
            
this.b;
        }
        public 
void run() {
            return 
a+b;
        }
    } 
Si es posible como hago el return desde un hilo ?????
__________________
Keep it simple and keep it fast.
  #2 (permalink)  
Antiguo 16/04/2007, 10:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servicio Web y Thread(Hilos)

El return debe ocurrir en el mismo Thread, asi que directamente no.
  #3 (permalink)  
Antiguo 16/04/2007, 11:52
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Re: Servicio Web y Thread(Hilos)

Gracias por la respuesta... pero en el segundo ejemplo no estoy haciendo el return desde el hilo???

O sea que ese ejemplo funcionaría???
__________________
Keep it simple and keep it fast.
  #4 (permalink)  
Antiguo 16/04/2007, 12:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servicio Web y Thread(Hilos)

No. El return que haces en el hilo es un return de la funcion "run()" del hilo, no del metodo que lanzo el hilo.

Si quieres que el metodo haga un return del resultado de ejecutar lo del hilo, entonces tienes que hacer que el metodo espere a que el Thread termine, le devuelva el valor y entonces hacer un return desde el metodo.

S!
  #5 (permalink)  
Antiguo 16/04/2007, 13:04
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Re: Servicio Web y Thread(Hilos)

Esta claro.... sería una cosa asi no:


Código PHP:
public class Math 
    public 
float add(float afloat b) { 
          
// Create and start the thread 
        
Thread thread = new BasicThread1(a,b); 
    
thread.start(); 
    While (!
Thread.ended){
        
sleep(100);
    }
    return 
Thread.result
    } 


class 
BasicThread1 extends Thread 
        
// This method is called when the thread runs 
        
int a
        
int b
    public 
int result;
        public 
boolean ended false;
        public 
BasicThread1(int a,int b){ 
            
this.a
            
this.b
        } 
        public 
void run() { 
            
result a+b
        
ended true;
        } 
    } 
te entendi bien?
__________________
Keep it simple and keep it fast.
  #6 (permalink)  
Antiguo 17/04/2007, 00:38
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servicio Web y Thread(Hilos)

Algo asi, aunque el codigo que pones no es correcto, pero en realidad para esperar lo apropiado es hacer un "join"
http://java.sun.com/j2se/1.4.2/docs/...ead.html#join()

De todas formas, si haces eso hacer el calculo en otro Thread no te sirve de nada, ya que igualmente te quedaras esperando a terminar el cálculo.

S!
  #7 (permalink)  
Antiguo 17/04/2007, 01:13
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Re: Servicio Web y Thread(Hilos)

Esta claro.... solo es un ejemplo... en realidad los hilos que pienso implementar tienen varias operaciones contra bases de datos que necesito realizar en paralelo. por eso necesito utilizar Threads....

Muchas gracias por la info.. voy a ver como implementarlo de la manera correcta con el metodo join .

;)
__________________
Keep it simple and keep it fast.
  #8 (permalink)  
Antiguo 17/04/2007, 04:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servicio Web y Thread(Hilos)

Si vas a lanzar varios Thread, quiza en vez de usar un join() para bloquearte, puedes usar las primitivas wait() y notify() para ir notificando al Thread principal a medida que los otros van terminando. Así no tienes que hacer un join() para cada uno de los Threads que lances.

Un ejemplo típico que yo he usado es crear una "cola" de trabajos y llenarla con las tareas a realizar, lanzar n Threads que van leyendo de la cola y vaciandola y cuando acaban su parte hacen un notifyAll(). El proceso principal hace un bucle esperando a que la cola se vacíe y si no está vacía hace un wait(), del que despierta cuando alguien hace un notifyAll. Tambien sirve si no es conveniente lanzar un thread por tarea, por que hay muchas, y asi puedes hacer que un Thread haga varias si al acabar todavia quedan pendientes en la cola.

Se puede hacer el wait() esperando que se vacie una cola de tareas... o esperando a que se llene una cola de "resultados", dependiendo de si necesitas que te devuelvan algo o no.

Se puede refinar con timeouts para que los procesos no se queden colgados esperando eternamente etc. pero la idea básica es esa.

En Java 5 creo que hay ya estructuras echas que te permiten tener colas sincronizadas etc. (paquete java.util.concurrent ), pero todavia no he podido experimentar bien con ellas. Segun el JDK que uses, quiza te ahorren un buen trabajo, aunque la base es esa.

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:54.