文档章节

java中的并发:进程和线程

引鸩怼孑
 引鸩怼孑
发布于 2015/07/29 09:23
字数 917
阅读 114
收藏 15

 

1.简介

1)进程:同一个系统中执行的一个子程序,包含三部分:虚拟CPU,代码,数据.
2)线程:同一个进程中执行的子程序流.
3)进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能.一个进程虽然包括多个线程,但是这些线程是共同享有进程占有的资源和地址空间的.进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位.

 

2.创建一个进程

  2.1首先了解三个类    1)Process(抽象类)
      进程类,提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁进程的方法,可以通过ProcessBuilder.start()和 Runtime.exec()方法创建一个本机进程,并返回Process子类的一个实例.
    2)ProcessBuilder(final类)
      此类用于创建操作系统进程,常用方法:
      ProcessBuilder(String... command)  利用指定的操作系统程序和参数构造一个进程生成器
      directory(File directory)   设置此进程生成器的工作目录 
      start()      使用此进程生成器的属性启动一个新进程,返回一个Process对象.
    3)RunTime
      每个java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接,可以通过getRuntime方法获取当前运行时,应用程序不能创建自己的Runtime类实例.通过RunTime.exec()创建的进程,最终还是通过ProcessBuilder类的start方法来创建的.
  2.2通过ProcessBuilder创建进程

Java代码   收藏代码
  1. public class ProcessDemo {  
  2.     // 启动进程打开cmd,并获取IP地址  
  3.     public static void main(String[] args) throws IOException {  
  4.         // 设置执行命令  
  5.         List<String> command = new ArrayList<>();  
  6.         Collections.addAll(command, "cmd""/c""ipconfig -all");  
  7.         ProcessBuilder pb = new ProcessBuilder(command);  
  8.         // 设置命令路径  
  9.         pb.directory(new File("c:\\windows\\system32"));  
  10.         // 开启进程  
  11.         Process process = pb.start();  
  12.   
  13.         Scanner scanner = new Scanner(process.getInputStream());  
  14.         while (scanner.hasNext()) {  
  15.             System.out.println(scanner.nextLine());  
  16.         }  
  17.         scanner.close();  
  18.     }  
  19. }  

 

2.3通过Runtime创建进程

Java代码   收藏代码
  1. public class ProcessDemo {  
  2.     public static void main(String[] args) throws IOException {  
  3.         Runtime run = Runtime.getRuntime();  
  4.         String[] cmd = { "cmd""/c""ipconfig -all" };  
  5.         Process process = run.exec(cmd, nullnew File("c:\\windows\\system32"));  
  6.   
  7.         Scanner scanner = new Scanner(process.getInputStream());  
  8.         while (scanner.hasNextLine()) {  
  9.             System.out.println(scanner.nextLine());  
  10.         }  
  11.         scanner.close();  
  12.     }  
  13. }  

 

3.创建一个线程

  3.1首先了解两个类
    1)Thread线程类,通过继承Thread类并重写run()方法,调用start()方法启动一个线程.
    2)Runnable接口,通过实现此接口并实现run()方法,将自身作为构造Thread的参数,然后通过Thread的start方法来启动一个线程.
    3)事实上,Thread类是实现了Runnable接口的.直接继承Thread类的话,可能比实现Runnable接口看起来更加简洁,但是由于java只允许单继承,一般建议选择实现Runnable接口.
  3.2通过继承Thread创建线程

Java代码   收藏代码
  1. public class ThreadDemo {  
  2.     public static void main(String[] args) {  
  3.         new Thread() {  
  4.             public void run() {  
  5.                 int i = 0;  
  6.                 while (i++ < 100) {  
  7.                     System.out.println("thread...i:" + i);  
  8.                 }  
  9.             }  
  10.         }.start();  
  11.         new Thread() {  
  12.             public void run() {  
  13.                 int j = 0;  
  14.                 while (j++ < 100) {  
  15.                     System.out.println("thread...j:" + j);  
  16.                 }  
  17.             }  
  18.         }.start();  
  19.     }  
  20. }  

 

运行结果为两个线程交替打印直到结束.
  3.3通过实现Runnable创建线程

Java代码   收藏代码
  1. public class ThreadDemo {  
  2.     public static void main(String[] args) {  
  3.         new Thread(new Runnable() {  
  4.             public void run() {  
  5.                 int i = 0;  
  6.                 while (i++ < 100) {  
  7.                     System.out.println("thread...i:" + i);  
  8.                 }  
  9.             }  
  10.         }).start();  
  11.         new Thread(new Runnable() {  
  12.             public void run() {  
  13.                 int j = 0;  
  14.                 while (j++ < 100) {  
  15.                     System.out.println("thread...j:" + j);  
  16.                 }  
  17.             }  
  18.         }).start();  
  19.     }  
  20. }  

 

运行结果为两个线程交替打印直到结束.
  3.4一个小问题

Java代码   收藏代码
  1. public class ThreadDemo {  
  2.     public static void main(String[] args) {  
  3.         new Thread(new Runnable() {  
  4.             public void run() {  
  5.                 int i = 0;  
  6.                 while (i++ < 100) {  
  7.                     System.out.println("runnable...:" + i);  
  8.                 }  
  9.             }  
  10.         }){  
  11.             public void run() {  
  12.                 int i = 0;  
  13.                 while (i++ < 100) {  
  14.                     System.out.println("thread...:" + i);  
  15.                 }  
  16.             }  
  17.         }.start();  
  18.     }  
  19. }  

本文转载自:http://xiao1zhao2.iteye.com/blog/2230996

共有 人打赏支持
引鸩怼孑
粉丝 44
博文 206
码字总数 16947
作品 0
南京
项目经理
私信 提问
Java并发教程-1进程和线程

http://www.iteye.com/magazines/131 计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理...

noday
2014/04/25
0
0
Java 10大优点—Part4—Java内存模型

在忙着参加在爱沙尼亚进行的 TEDx talk 演讲活动以及在比利时举办的一届非常忙碌的Devoxx 会议的间隙,我将继续推进 Java’s Rocking 的系列博文。 对还没有接触过这个系列博文的读者,不妨先...

foxlee
2013/12/09
339
1
Java线程面试题 Top 50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者...

loda0128
2015/05/29
0
0
Java高级-解析Java中的多线程机制

一、进程与应用程序的区别 进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中...

陶邦仁
2012/11/11
0
0
安卓中高级开发工程师面试之——面试永远逃不掉的Java线程面试题

不管你是Java工程师还是安卓开发工程师,只要你是计算机开发工程师,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大...

小饼干的梦
2018/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python中判断字符串是否包含中文

Python import reRE = re.compile(u'[\u4e00-\u9fa5]', re.UNICODE)match = re.search(RE, str)if match is None:# 没有包含中文字符 参考 Python regular expressions return true/f......

亚林瓜子
3分钟前
0
0
《CNCF × Alibaba 云原生技术公开课》正式首播

《CNCF × Alibaba 云原生技术公开课》立即观看:点击立即观看 云原生最初来描述云上应用的典型架构与特性,随着容器、Kubernetes、Serverless、FaaS技术的演进,CNCF(云原生计算基金会)把...

mcy0425
3分钟前
0
0
网站漏洞如何修复网站程序问题

jeecms 最近被爆出高危网站漏洞,可以导致网站被上传webshell木马文件,受影响的版本是jeecms V6.0版本到jeecmsV7.0版本。该网站系统采用的是JAVA语言开发,数据库使用的是oracle,mysql,sql数...

网站安全
6分钟前
0
0
git 中“warning: CRLF will be replaced by LF in”解决方案

https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important...

qwfys
11分钟前
0
0
Spring Boot配置ssl证书启用HTTPS协议

一 、点睛 SSL是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议和各种应用层协议之间,为数据通信提供安全支持。 SSL协议分为两...

故久呵呵
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部