Article - Una Ed Una Sola Vm!

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Article - Una Ed Una Sola Vm! as PDF for free.

More details

  • Words: 289
  • Pages: 1
Una ed una sola VM! di Michele Arpaia

Descrizione del problema Durante tutto l’arco di esecuzione di una applicazione Java, esisterà una ed una sola istanza della macchina virtuale, ma dal punto di vista del sistema operativo la VM non è altro che un processo in esecuzione e niente vieta di avere più istanze di uno stesso processo. Questo potrebbe causare problemi se il processo in considerazione è proprio un programma Java.

Soluzione al problema Per evitare che due o più istanze di uno stesso programma siano in piedi, bisogna esplicitamente implementare qualche meccanismo che segnali che l’istanza è già in esecuzione. Un metodo potrebbe essere quello aprire un file temporaneo in modo che un secondo tentativo di aprire il programma trovi già il file aperto e segnali l’impossibilità di lanciare il programma uscendo con una secca System.exit(1). Nell’implementare questa soluzione bisogna proteggere il file da cancellazioni “abusive” e dalla chiusura anormale della macchina virtuale. Un altro modo molto più semplice e pulito è quello di aprire (all’inizio del programma) una socket (ServerSocket) su una porta. Dato che una ServerSocket può ascoltare solo su una determinata porta in ogni momento, ogni tentativo di ascoltare su quella porta da qualsiasi altra applicazione (in particolare quella che si vuole rendere “unica”) causerà una java.net.BindException. Di seguito è riportato un semplice listato che mostra la soluzione: import java.io.*; import java.net.*; public class OneInstance { private static ServerSocket listenerSocket; public static void main(String[] args) { try { listenerSocket = new ServerSocket(5555); } catch(final java.net.BindException e) { System.err.println("Programma già in esecuzione…"); System.exit(1); } catch(final IOException e) { System.exit(1); } // da qui inizia il vero programma. In questo caso // semplice poniamolo in stand-by try { Thread.sleep(9000); } catch(final InterruptedException e) {} } }

Related Documents

Una Sola Carne
June 2020 6
Madre Hay Una Sola
November 2019 19
Refleja. Madre Hay Una Sola
November 2019 15
Una
December 2019 27
Una
December 2019 27