Java并发编程:进程的创建

*/-->

code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}

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

Java并发编程:进程的创建的更多相关文章

  1. Java并发编程:如何创建线程?

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  2. 【转】Java并发编程:如何创建线程?

    一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认是java.exe或者javaw.exe(windows下可以通过 ...

  3. 2、Java并发编程:如何创建线程

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  4. Java并发编程:进程和线程的由来(转)

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

  5. Java并发编程之线程创建和启动(Thread、Runnable、Callable和Future)

    这一系列的文章暂不涉及Java多线程开发中的底层原理以及JMM.JVM部分的解析(将另文总结),主要关注实际编码中Java并发编程的核心知识点和应知应会部分. 说在前面,Java并发编程的实质,是线程 ...

  6. Java并发编程:如何创建进程?

    转载自:http://www.cnblogs.com/dolphin0520/p/3913517.html 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程 ...

  7. java并发编程:如何创建线程

    原文:http://www.cnblogs.com/dolphin0520/p/3913517.html 一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也 ...

  8. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  9. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

  10. Java并发编程之深入理解线程池原理及实现

    Java线程池在实际的应用开发中十分广泛.虽然Java1.5之后在JUC包中提供了内置线程池可以拿来就用,但是这之前仍有许多老的应用和系统是需要程序员自己开发的.因此,基于线程池的需求背景.技术要求了 ...

随机推荐

  1. 云中沙箱学习笔记2-ECS之初体验

    1.1 背景知识 云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务.ECS的相关术语说明如下: --实例(Instance):是 ...

  2. 手机端 css 样式重置

    @charset "utf-8"; body, div, ul, li, ol, h1, h2, h3, h4, h5, h6, input, textarea, select, ...

  3. Java反编译工具Luyten-0.5.3

    Luyten是一款很强大的反编译工具包,是一款github的开源工具,软件功能非常强大,界面简洁明晰.操作方便快捷,设计得很人性化. 工具软件下载路径:https://github.com/death ...

  4. Sass-@extend

    Sass 中的 @extend 是用来扩展选择器或占位符.比如: .error { border: 1px #f00; background-color: #fdd; } .error.intrusi ...

  5. 在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码

    这两天装了一个mysql 5.7数据库,但是在本地dos登陆不上去,报错Access denied for user 'root'@'localhost'(using password:YES): 也 ...

  6. bzoj4811 [Ynoi2017]由乃的OJ 树链剖分+贪心+二进制

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4811 题解 我现在为什么都写一题,调一天啊,马上真的退役不花一分钱了. 考虑这道题的弱化版 N ...

  7. root登录

    ,编辑/etc/lightdm/lightdm.conf: gedit /etc/lightdm/lightdm.conf [Seat:*] autologin-guest=false autolog ...

  8. 修改Win7登陆界面墙纸

    修改Win7登陆界面墙纸 修改注册表.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\W ...

  9. 对promise的研究1

    通过看阮一峰老师的文章写出来的特此注明 1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其 ...

  10. PHP实现跨服务器session共享的方法教程

    今天带来PHP实现跨服务器session共享的方法教程. 本文实例讲述了PHP实现cookie跨域session共享的方法.分享给大家供大家参考,具体如下: 做过web开发的小伙伴们都了解cookie ...