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

  • 相关阅读:
    ExtJs多级联动菜单的一种实现
    初学jquery之自学笔记(2)
    微软MVP评Silverlight的功能特性和价值
    利用XMLFormView在Web部件页中或者自定义页面中嵌入Infopath表单
    初学jquery之自学笔记(3)
    我想大声告诉你
    HTC G7 金卡 制作
    黑苹果配置
    我的Android 从 2.3开始! 开发环境搭建
    新台式机配置表
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/7118623.html
Copyright © 2011-2022 走看看