0 votos
por (20 puntos) en Java
Hola a todos,

tengo una duda con un ejemplo que sale en un tutorial de SUN en Swing Connection.

Me aparece esto:

....

Thread loadThread;

Object lock = new Object();

boolean shouldStop=false;

.....

public void startLoading() {

        if(loadThread == null) {

        loadThread = new LoadThread();

        shouldStop = false;

        loadThread.start();

        }

    }

    public void stopLoading() {

        synchronized(lock) {

        shouldStop = true;

        lock.notify();

        }

    }

        class LoadThread extends Thread

    {

        public void run () {

            int min = 0;

            int max = 100;

            progressBar.setValue(min);

            progressBar.setMinimum(min);

            progressBar.setMaximum(max);

            Runnable runner = new Runnable() {

                public void run() {

                    int value = progressBar.getValue();

                    value++;

                    progressBar.setValue(value);

                    progressTextField.setText (""+value);

                }

            };

            for (int i=min;i<=max;i++)

            {

                try {

                    SwingUtilities.invokeAndWait(runner);

                } catch (InvocationTargetException e) {

                    break;

                } catch (InterruptedException e) {

                    // Ignore Exception

                }

                synchronized(lock)     {

                    if(shouldStop)

                        break;

                    try {

                        lock.wait(100);

                    } catch (InterruptedException e) {

                        // Ignore Exception

                    }

                }

            }

            loadThread = null;

        }

    }

}

mi pregunta es la siguiente:

Yo tenia entendido que lo que va entre parentesis despues de la sentencia synchronized era el objeto "compartido" , y las sentencias entre las llaves acceden a alguna propiedad (metodo) de dicho objeto.

Y lo que no entiendo es el uso del objeto "lock"

en la sentencia synchronized, puesto que el programa lo que hace es llenar un JProgressBar

...alguien me entendió?? espero no este muy enredado

   CHAO !


1 Respuesta

0 votos
por (8.5k puntos)
Buenas!

La palabra reservada synchronized se usa para indicar que ciertas partes del código, (habitualmente, una función miembro) están sincronizadas, es decir, que solamente un subproceso puede acceder a dicho método a la vez.

Cada método sincronizado posee una especie de &quot;llave&quot; que puede cerrar o abrir la puerta de acceso. Cuando un subproceso intenta acceder al método sincronizado mirará a ver si la llave está echada, en cuyo caso no podrá accederlo. Si método no tiene puesta la llave entonces el subproceso puede acceder a dicho código sincronizado.

En este caso el objeto lock hace de llave, y el código que hay dentro es el código sincronizado para que solo puede ser accedido por un subproceso a la vez.

En este ejemplo que pones también se hace uso de wait() y notify() para dormir y despertar hilos de ejecución. Este tutorial te puede servir de ayuda:

http://www.chuidiang.com/java/hilos/wait_y_notify.php


Preguntas relacionadas

0 votos
0 respuestas
0 votos
1 respuesta
0 votos
0 respuestas
preguntado por rosto94 (20 puntos) Ene 28, 2016 en Java
0 votos
0 respuestas
preguntado por rick_korn (120 puntos) Ene 28, 2016 en Java
0 votos
11 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...