swing - Diferencia entre java.exe y javaw.exe



(5)

java.exe es el comando donde espera que se complete la aplicación hasta que tome el siguiente comando. javaw.exe es el comando que no esperará a que se complete la aplicación. puedes seguir adelante con otros comandos.

Recientemente noté que algunas aplicaciones se ejecutan en javaw (no en java ). ¿Cuál es la diferencia entre ellos y cómo puedo ejecutar mi aplicación Swing en javaw ?


java.exe es la aplicación de la consola, mientras que javaw.exe es la aplicación de Windows (sin consola). No puede tener Console con javaw.exe .


El comando javaw.exe es idéntico a java.exe, excepto que con javaw.exe no hay una ventana de consola asociada


La diferencia está en el subsystem que apunta cada ejecutable.

  • java.exe dirige al subsistema CONSOLE .
  • javaw.exe dirige al subsistema WINDOWS .

Ejemplo sobre el sueño no libera el bloqueo y espera hace

Aquí hay dos clases:

  1. Principal : contiene el método principal y dos hilos.
  2. Singleton : Esta es una clase de singleton con dos métodos estáticos: getInstance () y getInstance (boolean isWait).

    public class Main {
    
    private static Singleton singletonA = null;
    private static Singleton singletonB = null;
    
    public static void main(String[] args) throws InterruptedException {
    
    Thread threadA = new Thread() {
        @Override
        public void run() {
    
            singletonA = Singleton.getInstance(true);
    
        }
    };
    
    Thread threadB = new Thread() {
        @Override
        public void run() {
            singletonB = Singleton.getInstance();
    
            while (singletonA == null) {
                System.out.println("SingletonA still null");
            }
    
            if (singletonA == singletonB) {
                System.out.println("Both singleton are same");
            } else {
                System.out.println("Both singleton are not same");
            }
    
        }
    };
    
    threadA.start();
    threadB.start();
    
     }
    }
    

y

public class Singleton {

    private static Singleton _instance;

    public static Singleton getInstance() {

    if (_instance == null) {
        synchronized (Singleton.class) {
            if (_instance == null)
                _instance = new Singleton();
        }
    }
    return _instance;

}

public static Singleton getInstance(boolean isWait) {

    if (_instance == null) {
        synchronized (Singleton.class) {
            if (_instance == null) {
                if (isWait) {
                    try {
                        // Singleton.class.wait(500);//Using wait
                        Thread.sleep(500);// Using Sleep
                        System.out.println("_instance :"
                                + String.valueOf(_instance));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                _instance = new Singleton();
            }
        }
    }
    return _instance;

 }
}

Ahora ejecute este ejemplo, obtendrá debajo de la salida:

_instance :null
Both singleton are same

Aquí las instancias de Singleton creadas por threadA y threadB son las mismas. Significa que threadB está esperando afuera hasta que threadA libere su bloqueo.

Ahora cambie el Singleton.java comentando Thread.sleep (500); método y descomentación Singleton.class.wait (500); .Aquí debido a Singleton.class.wait (500); El método threadA liberará todos los bloqueos adquiridos y se moverá al estado "No ejecutable", threadB obtendrá cambios para ingresar en el bloque sincronizado.

Ahora corre otra vez:

SingletonA still null
SingletonA still null
SingletonA still null
_instance :[email protected]
SingletonA still null
SingletonA still null
SingletonA still null
Both singleton are not same

Aquí, las instancias de Singleton creadas por threadA y threadB NO son las mismas debido a que threadB consiguió un cambio para ingresar en el bloque sincronizado y, luego de 500 milisegundos, threadA comenzó desde su última posición y creó un objeto Singleton más.





java swing javaw