Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 15-abr-2007, 17:06   #1 (permalink)
Viet tiene algunos puntos positivos de karma
 
Avatar de Viet
 
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 217
Triste 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 ?????
__________________
El hombre arriesga su vida cada ves que elige y eso es lo que lo hace libre.
Viet está desconectado   Responder Citando
Antiguo 16-abr-2007, 10:18   #2 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.570
Re: Servicio Web y Thread(Hilos)

El return debe ocurrir en el mismo Thread, asi que directamente no.
GreenEyed está desconectado   Responder Citando
Antiguo 16-abr-2007, 11:52   #3 (permalink)
Viet tiene algunos puntos positivos de karma
 
Avatar de Viet
 
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 217
Triste 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???
__________________
El hombre arriesga su vida cada ves que elige y eso es lo que lo hace libre.
Viet está desconectado   Responder Citando
Antiguo 16-abr-2007, 12:33   #4 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.570
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!
GreenEyed está desconectado   Responder Citando
Antiguo 16-abr-2007, 13:04   #5 (permalink)
Viet tiene algunos puntos positivos de karma
 
Avatar de Viet
 
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 217
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?
__________________
El hombre arriesga su vida cada ves que elige y eso es lo que lo hace libre.
Viet está desconectado   Responder Citando
Antiguo 17-abr-2007, 00:38   #6 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.570
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!
GreenEyed está desconectado   Responder Citando
Antiguo 17-abr-2007, 01:13   #7 (permalink)
Viet tiene algunos puntos positivos de karma
 
Avatar de Viet
 
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 217
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 .

;)
__________________
El hombre arriesga su vida cada ves que elige y eso es lo que lo hace libre.
Viet está desconectado   Responder Citando
Antiguo 17-abr-2007, 04:34   #8 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.570
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!
GreenEyed está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Desactivado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 20:07.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93