English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Introduzione di base a Java

Controllo dei flussi di lavoro di Java

Array di Java

Java orientata agli oggetti (I)

Java orientata agli oggetti (II)

Java orientata agli oggetti (III)

Gestione delle eccezioni in Java

List di Java

Queue (coda) di Java

Map di Java

Set di Java

Input/Output (I/O) di Java

Reader/Writer di Java

Altri argomenti di Java

API di processo migliorata in Java 9

Nuove funzionalità Java 9

Prima di Java 9, l'API Process mancava di supporto fondamentale per l'uso dei processi locali, come ottenere il PID e il proprietario del processo, l'ora di inizio del processo, la quantità di tempo CPU utilizzato dal processo, quante processi locali sono in esecuzione, ecc.

Java 9 ha aggiunto un'interfaccia chiamata ProcessHandle all'API Process per migliorare la classe java.lang.Process.

Un esempio dell'interfaccia ProcessHandle identifica un processo locale, che consente di interrogare lo stato del processo e gestirlo.

L'interfaccia ProcessHandle nesteda fornisce un modo per i sviluppatori di evitare l'uso di codice locale per ottenere il PID di un processo locale.

Non possiamo fornire l'implementazione dei metodi nell'interfaccia. Se dobbiamo fornire una combinazione di metodi astratti e non astratti (metodi e implementazione), allora dobbiamo utilizzare una classe astratta.

Il metodo onExit() dichiarato nell'interfaccia ProcessHandle può essere utilizzato per innescare alcune operazioni quando un processo termina.

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;
 
public class Tester {
   public static void main(String[] args) throws IOException {
      ProcessBuilder pb = new ProcessBuilder("notepad.exe");
      String np = "Non presente";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("ID processo: \n", p.pid());
      System.out.printf("Nome comando: \n", info.command().orElse(np));
      System.out.printf("Linea di comando: \n", info.commandLine().orElse(np));
 
      System.out.printf("Tempo di inizio: \n",)
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault()))
         .toLocalDateTime().toString()).orElse(np));}}
 
      System.out.printf("Argomenti : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));
 
      System.out.printf("Utente : %s%n", info.user().orElse(np));
   } 
}

Il risultato di esecuzione dell'esempio sopra è:

ID processo : 5800
Nome comando : C:\Windows\System32\notepad.exe
Riga di comando : Non Presenti
Ora di inizio: 2017-11-04T21:35:03.626
Argomenti : Non Presenti
Utente: amministratore

Nuove funzionalità Java 9