entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

¿Se puede compartir memoria en java Threads con la memoria principal?

Bien os pongo en contexto, tengo un mini http :

public class miniHTTP {

     /**
     * @param args
     */
   public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
        * Descriptores de socket servidor y de socket con el cliente
        */
        String puerto="";
                String usuario="Romero";
        try
        {

            if (args.length < 1) {
                System.out.println("Debe indicar el puerto de escucha del servidor");
                System.out.println("$./Servidor puerto_servidor");
                System.exit (1);
            }
            puerto = args[0];
            ServerSocket skServidor = new ServerSocket(Integer.parseInt(puerto));
            System.out.println("Escucho el puerto " + puerto);

            /*
            * Mantenemos la comunicacion con el cliente
            */  
            for(;;)
            {
                /*
                * Se espera un cliente que quiera conectarse
                */
                Socket skCliente = skServidor.accept(); // Crea objeto
                System.out.println("Sirviendo cliente...");

                Thread t = new hiloServidor(skCliente);
                t.start();

            }
        }
        catch(Exception e)
        {
            System.out.println("Error: " + e.toString());
        }
    }

}

que genera hilos cada vez que se conecta un cliente, me gustaría saber si puedo acceder desde el hilo thread t (public class hiloServidor extends Thread) a la variable de la memoria principal usuario. Se que en c se puede pero en java no tengo ni idea de como obtener los valores desde el hilo hijo

2 Respuestas

0voto

bl4z3r Puntos16850

Si, se puede. Si la clase hiloServidor expone variables publicas volátiles que hacen referencia a skCliente entonces, no debería tener problemas.

Por ejemplo:

public class hiloServidor extends Thread
{
    public volative Socket _socketCliente;

    public hiloServidor(Socket skCliente)
    {
        this._socketCliente = skCliente;
    }

    ...
}

Cuando quieras acceder al Socket del hilo, simplemente, haces:

Thread t = new hiloServidor(skCliente);
t.start();
...
Socket variable = t._socketCliente;

Igual, advierto que es hay mejores manera de obtener resultados de un cliente. Mediante hilos no es aconsejable. Es preferible el uso de Callables y FutureTask para este tipo de tareas.

0voto

MitsuGami Puntos8010

Solo haz la variable volatile. FutureTask tiene otro enfoque, se usa para programación asíncrona, en donde se espera un valor de regreso desde un Callable (thread asíncrono).

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta