Tag: 进程

  1. Java中的进程

    本文基于JDK 1.8.0_45 在Java中当涉及到并发的问题的时候我们一般是使用多线程来解决问题,实际上Java中不仅提供了线程的API,同时也提供的进程的API。之所以大家不太使用进程的API解决并发的问题是因为: 进程的创建过于昂贵; 进程的管理依赖于操作系统,不同的操作系统对上层暴露的进程管理的权限是不同的; Java中的进程API是Process这个抽象类,另外提供了ProcessBuilder的构造类来构造进程。Java中的进程API有以下特性: 由于进程的管理依赖于操作系统,Java有些时候不对进程的创建做任何保证; 由于某些操作系统的输入输出流的buffer有限,这导致一些特殊情况下可能读写流会导致进程假死甚至死锁; 环境变量的设置依赖于操作系统,可能操作系统不允许修改环境变量,也可能操作系统的环境变量的字符集是JDK不支持,这可能会导致问题; 以下是一个简单的例子: new ProcessBuilder("ls") .directory(new File("/")) .inheritIO() .start(); 以上代码是构建了一个子进程在根目录下执行ls命令,并将输入输出错误流重定向到JRE默认的对应流中。 另外通过以下代码可以打印所有的系统环境变量: System.out.println(new ProcessBuilder("ls").environment());…

    on JDK8 Process ProcessBuilder 进程