zoukankan      html  css  js  c++  java
  • Java并发编程:进程的创建

    Java并发编程:进程的创建

    Java并发编程:进程的创建

    上次聊了进程和线程的相关概念,那么,怎么在Java中创建一个进程呢?
    当我们创建一个应用程序,然后执行这个程序,系统肯定会创建一个进程。我们这里讲的不是这种,而是在已经运行的程序内部再去调用运行其他程序来创建进程。
    Java中调用其他程序有两种方式:Runtime.getRuntime().exec() 和 ProcessBuilder.start()。

    1 Runtime.getRuntime().exec()

    先看一个例子:

    public class ProcessDemo {
        public static void main(String[] args) {
            Runtime proc = Runtime.getRuntime();
            try {
                proc.exec("open /Applications/Launchpad.app");
                // proc.exec("open notepad.exe");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在MacOsX中打开一个Launchpad.app程序,或者在Windows中打开一个记事本,就是这么简单。那么,我们观察一下,它是不是和我们有些语言中的exec一样,是阻塞运行的呢?

    import javax.swing.JOptionPane;
    
    public class ProcessDemo {
        public static void main(String[] args) {
            Runtime proc = Runtime.getRuntime();
            try {
                proc.exec("open /Applications/Launchpad.app");
                // proc.exec("open notepad.exe");
                JOptionPane.showMessageDialog(null,
                                              "Finished!",
                                              "TITLE",
                                              JOptionPane.WARNING_MESSAGE);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    可以看出,并不是阻塞运行的。

    2 ProcessBuilder.start()

    我们看一下用ProcessBuilder怎么实现?

    public class ProcessDemo {
        public static void main(String[] args) {
            ProcessBuilder pb = new ProcessBuilder("open", "/Applications/Launchpad.app");
            try {
                pb.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    ProcessBuilder 的command需要分开来写,第一个是command名称,后面是它的参数。我们发现和Rumtime的exec()其实差不多。如果,我们去看源码的话,发现Runtime的exec也是用的ProcessBuilder来实现的。

    Date: 2017-07-03 22:39

    Author: WEN YANG

    Created: 2017-07-04 Tue 21:36

    Emacs 25.2.1 (Org mode 8.2.10)

    Validate

  • 相关阅读:
    24.Spring-Boot-Actuator与Spring-Security整合应用
    Spring Boot 和 Spring 到底有啥区别?用了这么久,你知道吗?
    一文,5 分钟搞明白 MySQL 是如何利用索引的!
    大厂面试必问的Spring全家桶 4 大开源框架,思维脑图全总结,终于出来了
    这些SQL错误用法,如果经常犯,说明你的水平还很low...
    新技能 MyBatis 千万数据表,快速分页!
    牛逼!在IDEA里搞Spring Boot Mybatis反向工程,太爽咯~
    有了 HTTP 协议,为什么还要 RPC 协议,两者有什么区别?
    把 Spring Cloud 给拆了!详解每个组件的作用,值得收藏!
    27个阿里 Java 开源项目,值得收藏!
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/7118623.html
Copyright © 2011-2022 走看看