目录
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(); } }
运行结果是什么呢,感兴趣的可以尝试一下.
相关推荐
进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在...
Java并发编程进程和线程之由来Java开发Java经验技巧共3页.pdf.zip
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
Java并发性和多线程文档主要讲述了Java中的并发、多线程等问题
在前面一篇文章中已经讲述了在进程和线程的由来,来讲一下在Java中如何创建线程,让线程去执行一个子任务。下面先讲述一下Java中的应用程序和进程相关的概念知识,然后再阐述如何创建线程以及如何创建进程。下面是...
创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对...
多线程: 多线程是一种计算机编程技术,它涉及到在一个程序中创建和管理多个线程,每个线程都可以独立执行不同的任务或代码段。多线程允许程序同时执行多个任务,可以是并发执行或并行执行,具体取决于硬件和操作...
线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间。 进程是负责整个程序的运行,而线程是程序中具体的某个独立功能的运行。一个进程中至少应该有一个线程。 1.2多线程的介绍 在多任务,...
线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。 线程的特点:一个进程可以包含多个线程,而一个线程至少要有一个父进程。 线程可以有自己的堆栈,程序计数器和局部变量。 线程与父进程的其他...
Java并发编程的核心概念包括: 线程(Thread):线程是程序执行流的最小单元。一个进程可以有一个或多个线程,每个线程都执行其自己的任务。 进程(Process):进程是操作系统分配资源(如内存)和调度的单位。一个...
模拟多进程的并发执行,java编写,swing实现
主要参考资料:java并发编程的艺术、Java并发——同步工具类 二、CountDownLatch(同步倒数计数器)–不仅仅用于多线程 1.作用:允许一个或多个线程等待其他线程完成操作。 CountDownLatch的构造函数...
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同...
线程是程序执行的一条路径,一个进程中可以包含多条线程 什么是进程:ctrl+alt+delete 启动任务管理器,查看进程 多线程并发执行可以提高程序的效率,可以同时完成多项工作 举例:电脑管家同时进行清理垃圾...
一个进程中可以包含一个或多个线程,一个线程就是程序内部的一条执行线索。 在单线程中,程序代码按调用顺序依次往下执行,不能实现两段程序代码同时交替运行的效果。如果一个程序中要实现两段程序代码同时交替运行...
Unix操作系统环境下,应用程序可以利用fork... 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式应用系统中多客户端的并发访问以及提高服务器的响应效率奠定坚实基础。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程...
第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 [免费观看] 00:09:13分钟 | 第5节线程的状态以及各状态之间的转换详解...
针对需求1、2: 为实现多个进程并发运行需要建立管理对象和进程对象的联系以便对运行的进程进行管理,故可以在管理对象中设置就绪、阻塞、运行队列来容纳进程,从而方便的进行管理; ①创建:初始化刚建立的进程对象...
Java通过对多线程的支持来在一个进程内并发执行多个线程,每个线程都并行执行不同的任务。 二、线程创建方式 一共四种方式:继承Thread类、实现Runnable接口、ExecutorService和Call(有返回Class类型值)、基于...