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

Основной курс Java

Java управление потоком

Java массив

Java объектно-ориентированное программирование (I)

Java объектно-ориентированное программирование (II)

Java объектно-ориентированное программирование (III)

Обработка исключений Java

Java список (List)

Java Queue (очередь)

Java Map集合

Java Set集合

Java ввод-вывод (I/O)

Java Reader/Writer

Другие темы Java

Улучшенный API процесса Java 9

Java 9 новые возможности

До Java 9 API процесса все еще не поддерживал основные функции использования локальных процессов, такие как получение PID процесса и его владельца, время начала процесса, количество используемого CPU времени, количество запущенных локальных процессов и т.д.

Java 9 добавил интерфейс ProcessHandle в Process API для улучшения java.lang.Process класса.

Пример интерфейса ProcessHandle идентифицирует локальный процесс, позволяя запрашивать состояние процесса и управлять им.

Интерфейс Info, вложенный в ProcessHandle, позволяет разработчикам избежать ситуации, когда им приходится использовать локальный код для получения PID локального процесса.

Мы не можем предоставить реализацию метода в интерфейсе. Если мы хотим предоставить абстрактный метод и неабстрактный метод (метод и его реализацию), то нам нужно использовать абстрактный класс.

Метод onExit() из интерфейса ProcessHandle может быть использован для выполнения某些 операций при завершении процесса.

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 = "Не существует";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("ID процесса: %s%n", p.pid());
      System.out.printf("Имя команды: %s%n", info.command().orElse(np));
      System.out.printf("Командная строка: %s%n", info.commandLine().orElse(np));
 
      System.out.printf("Время старта: %s%n",
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault()))
         .toLocalDateTime().toString()).orElse(np));}}
 
      System.out.printf("Аргументы : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));
 
      System.out.printf("Пользователь : %s%n", info.user().orElse(np));
   } 
}

Результат выполнения примера выше:

ID процесса : 5800
Имя команды : C:\Windows\System32\notepad.exe
Командная строка : Отсутствуют
Время старта: 2017-11-04T21:35:03.626
Аргументы : Отсутствуют
Пользователь: администратор

Java 9 новые возможности