Java 9 新特性之模块化和进程API
来源:互联网 发布:ubuntu u盘 编辑:程序博客网 时间:2024/05/18 01:07
Java 9 新特性:https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-C23AFD78-C777-460B-8ACE-58BE5EA681F6
1. Java Platform Module System 模块化系统
模块化系统是Java 9 最大的一个特性,模块之间存在相互的依赖关系,可以导出一个公共的API,并且隐藏实现的细节,使用Java 9的模块化可以减少内存的开销。在JVM启动的时候,整个rt.jar都会被JVM加载到内存当中去,模块化可以根据模块的需要加载程序运行需要的class, 如下,通过requires关键字可以引入依赖的模块,通过exports关键字可以导出包。
module com.baeldung.java9.modules.car { requires com.baeldung.java9.modules.engines; exports com.baeldung.java9.modules.car.handling; }
2. Process API Updates 进程API
2.1 创建进程
通过创建进程可以运行shell命令,通过ProcessBuilder类可以创建一个线程,如下:
public static void setEnvTest() throws IOException, InterruptedException { ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", "echo $horse $dog $HOME").inheritIO(); pb.environment().put("horse", "oats");//绑定运行参数 pb.environment().put("dog", "treats"); //通过start方法可以获得一个proccess实例,waitFor方法等待进程运行结束 pb.start().waitFor(); }
2.2 获取进程信息
通过pid 方法可以获取进程的PID,info方法会返回一个ProcessHandle.Info实例,其中包含开始时间和用户信息
public static void getInfoTest() throws IOException { ProcessBuilder pb = new ProcessBuilder("echo", "Hello World!"); String na = "<not available>"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("Process ID: %s%n", p.pid()); System.out.printf("Command name: %s%n", info.command().orElse(na)); System.out.printf("Command line: %s%n", info.commandLine().orElse(na)); System.out.printf("Start time: %s%n", info.startInstant().map(i -> i.atZone(ZoneId.systemDefault()) .toLocalDateTime().toString()) .orElse(na)); System.out.printf("Arguments: %s%n", info.arguments().map(a -> Stream.of(a) .collect(Collectors.joining(" "))) .orElse(na)); System.out.printf("User: %s%n", info.user().orElse(na)); }
2.3 重定向进程输出
Process.getOutputStream 和Process.getErrorStream方法可以获取进程的输出流,此外通过 redirectOutput 和 redirectError可以在进程运行前将进程输出到文件中
public static void redirectToFileTest() throws IOException, InterruptedException { File outFile = new File("out.tmp"); Process p = new ProcessBuilder("ls", "-la") .redirectOutput(outFile) .redirectError(Redirect.INHERIT) .start(); int status = p.waitFor(); if (status == 0) { p = new ProcessBuilder("cat" , outFile.toString()) .inheritIO() .start(); p.waitFor(); } }
阅读全文
0 0
- Java 9 新特性之模块化和进程API
- Java 9 新特性来临——模块化
- Java 9 新特性来临——模块化--详解
- Servlet3.0 新特性之模块化实践
- Java 8新特性之新的时间日期API
- ES6新特性模块化
- java api 1.5新特性
- java9新特性-Process 进程 API
- Java SE 6 新特性系列之四 编译器 API
- Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
- ES6新特性:使用export和import实现模块化
- ES6新特性:使用export和import实现模块化
- ES6新特性:使用export和import实现模块化
- Java 9模块化特性及工具探讨
- Android 4.0 API新特性之OVERVIEW
- Android 4.0 API新特性之OVERVIEW
- Android 4.0 API新特性之OVERVIEW
- Android 4.0 API新特性之OVERVIEW
- Mac系统之----教你怎么显示隐藏文件,或者关闭显示隐藏文件
- 怎么会有两个“原本”
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空
- 深浅拷贝与写时拷贝的简单认知
- mysql Community Server 5.7安装教程以及常见错误
- Java 9 新特性之模块化和进程API
- 智慧城市建设概述
- [设计模式]职责链模式
- Redis系列-7.有序集合(zset)结构
- X86 指令速查
- android自定义ViewGroup卫星导航菜单
- dp
- .NET Conf 2017后初尝Xamarin Forms 3.0@Linux
- 列表组件的运用