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

  • 相关阅读:
    EditText被输入法覆盖的解决方法
    计算屏幕大小
    [转]在adt-bundle-linux建立工程找不到ADB & R文件
    3.18 迷茫的方向
    安卓笔记:Fragment
    安卓学习笔记:转Android LayoutInflater详解
    Android布局大全(转)
    第二章 Android基本应用开发与解析
    Datetime中offset-naive与offset-aware时间的计算
    Python日期操作datetime
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/7118623.html
Copyright © 2011-2022 走看看