`
xiao1zhao2
  • 浏览: 39509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的并发:进程和线程

阅读更多
目录
1.简介
2.创建一个进程
3.创建一个线程

 

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创建进程

				public class ProcessDemo {
					// 启动进程打开cmd,并获取IP地址
					public static void main(String[] args) throws IOException {
						// 设置执行命令
						List<String> command = new ArrayList<>();
						Collections.addAll(command, "cmd", "/c", "ipconfig -all");
						ProcessBuilder pb = new ProcessBuilder(command);
						// 设置命令路径
						pb.directory(new File("c:\\windows\\system32"));
						// 开启进程
						Process process = pb.start();

						Scanner scanner = new Scanner(process.getInputStream());
						while (scanner.hasNext()) {
							System.out.println(scanner.nextLine());
						}
						scanner.close();
					}
				}

 

2.3通过Runtime创建进程

				public class ProcessDemo {
					public static void main(String[] args) throws IOException {
						Runtime run = Runtime.getRuntime();
						String[] cmd = { "cmd", "/c", "ipconfig -all" };
						Process process = run.exec(cmd, null, new File("c:\\windows\\system32"));

						Scanner scanner = new Scanner(process.getInputStream());
						while (scanner.hasNextLine()) {
							System.out.println(scanner.nextLine());
						}
						scanner.close();
					}
				}

 

3.创建一个线程

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

				public class ThreadDemo {
					public static void main(String[] args) {
						new Thread() {
							public void run() {
								int i = 0;
								while (i++ < 100) {
									System.out.println("thread...i:" + i);
								}
							}
						}.start();
						new Thread() {
							public void run() {
								int j = 0;
								while (j++ < 100) {
									System.out.println("thread...j:" + j);
								}
							}
						}.start();
					}
				}

 

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

				public class ThreadDemo {
					public static void main(String[] args) {
						new Thread(new Runnable() {
							public void run() {
								int i = 0;
								while (i++ < 100) {
									System.out.println("thread...i:" + i);
								}
							}
						}).start();
						new Thread(new Runnable() {
							public void run() {
								int j = 0;
								while (j++ < 100) {
									System.out.println("thread...j:" + j);
								}
							}
						}).start();
					}
				}

 

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

				public class ThreadDemo {
					public static void main(String[] args) {
						new Thread(new Runnable() {
							public void run() {
								int i = 0;
								while (i++ < 100) {
									System.out.println("runnable...:" + i);
								}
							}
						}){
							public void run() {
								int i = 0;
								while (i++ < 100) {
									System.out.println("thread...:" + i);
								}
							}
						}.start();
					}
				}

 

运行结果是什么呢,感兴趣的可以尝试一下.

3
1
分享到:
评论
2 楼 windlike 2015-07-29  
java创建进程有什么用处呢?
1 楼 戢_时光 2015-07-29  
进程用处多多啊 写的真好  转了。

相关推荐

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 &amp; 并发工具,线程池,并发实践

    进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在...

    Java并发编程进程和线程之由来Java开发Java经验技

    Java并发编程是Java开发中的重要领域,涉及到进程与线程的概念,这两个概念是理解多任务执行的基础。在现代计算机系统中,进程和线程被广泛用于实现高效的资源管理和任务调度。 **1. 进程** 进程是操作系统分配...

    Java+并发性和多线程

    Java并发性和多线程是Java开发中至关重要的概念,它们涉及到如何在单个或多个处理器上同时执行程序的不同部分,从而提升程序的效率和响应速度。在这个领域,Java提供了丰富的工具和API,使得开发者能够有效地管理和...

    java多线程笔记

    Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58

    java并发编程:设计原则与模式.rar

    《Java并发编程:设计原则与模式》是一本深入探讨Java多线程编程的书籍,它涵盖了并发编程中的关键概念、原则和模式。在Java中,并发处理是优化应用程序性能、提高资源利用率的重要手段,尤其在现代多核处理器的环境...

    Java 的多线程,程序、进程和线程的概念31

    在一个进程中可以有多个线程,它们共享进程的资源,但拥有各自的栈空间和程序计数器,这样就允许多个任务并发执行。 Java中的多线程主要涉及以下几个方面: 1. **线程的创建**:在Java中,有两种创建线程的方式。...

    模拟多进程并发

    在Java中,由于JVM自身不直接支持原生的多进程,开发者可以使用Java的并发库,如线程、守护线程、线程池,甚至通过JNI(Java Native Interface)调用C/C++库来实现这一目标。 描述中提到的“java编写,swing实现”...

    Java 软件设计基础:Java线程机制

    Java 软件设计基础:Java线程机制 Java 软件设计基础中,Java 线程机制是指在 Java ...Java 线程机制是 Java 软件设计基础中的一个重要组成部分,它提供了实现多线程编程的机制,从而提高了系统的并发能力和响应速度。

    深入学习:Java多线程编程

    《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...

    进程和线程详解

    在编程语言中,如Java、Python、C++等,都提供了对进程和线程的支持。例如,Java的Thread类和ProcessBuilder类分别用于处理线程和进程,Python的os和threading模块提供了类似的功能。 学习进程和线程对于理解操作...

    Java并发编程:设计原则与模式(第二版).rar

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java平台上的多线程和并发编程的著作。本书旨在帮助开发者理解和掌握在Java环境中进行高效并发处理的关键技术与设计模式。以下是对该书内容的一些核心知识...

    JAVA线程与进程的区别

    JAVA语言中,线程(Thread)和进程(Process)是两个基本概念,它们都是操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。但是,它们之间有着本质的区别。 首先,进程是操作系统...

    Java并发编程:设计原则与模式(第二版)-3PDF

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java平台上的多线程和并发编程的权威著作。这本书旨在帮助开发者理解和掌握如何有效地编写可扩展且高效的并发程序。以下是书中涵盖的一些关键知识点: 1....

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

    在前面一篇文章中已经讲述了在进程和线程的由来,来讲一下在Java中如何创建线程,让线程去执行一个子任务。下面先讲述一下Java中的应用程序和进程相关的概念知识,然后再阐述如何创建线程以及如何创建进程。下面是...

    深入解析:Java中的线程与进程

    本文将详细探讨Java中的线程和进程的区别,以及它们在程序设计和运行时的角色和重要性 理解线程和进程的区别对于Java程序员来说至关重要。线程提供了一种高效的方式来实现并发执行,而进程则是操作系统资源分配的...

    Java 并发编程:设计原则与模式

    总的来说,“Java并发编程:设计原则与模式”涵盖了从基础到高级的并发编程概念,帮助开发者理解和应用Java平台的并发特性,以构建可扩展、高性能的多线程应用程序。通过深入学习和实践这些知识点,开发者可以在...

    14个Java线程并发面试题和答案..pdf

    答案:有两种方式可以创建Java线程:继承Thread类或实现Runnable接口。继承Thread类时,需要重写run()方法;实现Runnable接口时,需要实现run()方法。 知识点:Java线程的创建方式、Thread类、Runnable接口、run()...

    一本经典的多线程书籍 Java并发编程 设计原则与模式 第二版 (英文原版)

    3. **并发容器**:书中深入讨论了Java并发容器,如ArrayList、LinkedList、HashSet、HashMap以及并发优化过的ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet等,以及它们在多线程环境下的性能和使用...

    java并发编程实战源码,java并发编程实战pdf,Java

    《Java并发编程实战》是Java并发编程领域的一本经典著作,它深入浅出地介绍了如何在Java平台上进行高效的多线程编程。这本书的源码提供了丰富的示例,可以帮助读者更好地理解书中的理论知识并将其应用到实际项目中。...

    Java并发编程_设计原则和模式(CHM)

    Java并发编程是软件开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。本资源"Java并发编程_设计原则和模式(CHM)"聚焦于Java语言在并发环境下的编程技巧、...

Global site tag (gtag.js) - Google Analytics