进程线程
2016-07-20 15:56
218 查看
要明白线程进程之间的关系,首先就要明白程序、进程、线程之间的定义与联系!
程序
何为程序?程序就是一组指令的集合或是代码文件。
进程
何为进程?在操作系统中,每个独立执行的程序都可以称为一个进程,也就是“正在运行的程序”。打开任务管理器,点击进程界面,可以看到正在运行的程序,也就是系统所有的进程。
线程
每个运行的程序都是一个进程,在每一个进程中还可以有多个执行单位同时运行,这些执行单元就被称为线程。操作系统中每个进程至少存在一个线程,用来来执行main()方法中的代码。多线程运行时,每个线程之间都是独立的,它们可以并发执行。
区别与联系
进程与程序:程序是静态的,进程是动态的。一个进程代表一个程序,一个程序可以有多个进程。
进程与线程:操作系统给每个进程分配了资源,而线程只能共享进程分配的资源。一个进程至少包含一个线程。
线程的创建
在java中线程的创建有两种方法。一是继承Thread类,二是实现Runnable接口。
程序运行结果如下图:
程序结果如下图:
线程实现方法总结
由上面两个代码运行结果得出:继承Thread类和实现Runnable接口都能实现多线程。
线程生命周期及状态转换
线程周期分为五个状态,分别是新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked),死亡状态(Terminated)。
新建状态(New)
当线程对象被创建的时候,线程的生命周期遍开始了,这时它还不能运行,和其他java对象一样,仅仅由java虚拟机为其分配内存;
就绪状态(Runnable)
当start()方法调用时,该线程进入就绪状态。处于就绪状态的线程位于可运行池中。
运行状态(Running)
如果处于就绪状态的线程获得CPU使用权,开始执行run方法中的代码,则该线程处于运行状态。
阻塞状态(Blocked)
一个正在执行的线程由于某种特殊情况如输入输出时,会舍弃CPU使用权,进入阻塞状态。当特殊情况处理完后不是立即进入运行状态,而是转入就绪状态,等待系统调度。
死亡状态(Terminated)
当线程的的run()方法运行完毕或者线程抛出一个未捕获的异常、错误,线程就进入死亡状态。
程序
何为程序?程序就是一组指令的集合或是代码文件。
进程
何为进程?在操作系统中,每个独立执行的程序都可以称为一个进程,也就是“正在运行的程序”。打开任务管理器,点击进程界面,可以看到正在运行的程序,也就是系统所有的进程。
线程
每个运行的程序都是一个进程,在每一个进程中还可以有多个执行单位同时运行,这些执行单元就被称为线程。操作系统中每个进程至少存在一个线程,用来来执行main()方法中的代码。多线程运行时,每个线程之间都是独立的,它们可以并发执行。
区别与联系
进程与程序:程序是静态的,进程是动态的。一个进程代表一个程序,一个程序可以有多个进程。
进程与线程:操作系统给每个进程分配了资源,而线程只能共享进程分配的资源。一个进程至少包含一个线程。
线程的创建
在java中线程的创建有两种方法。一是继承Thread类,二是实现Runnable接口。
package test; /** * 线程创建 * * 继承Thread类 * * @author lx * */ public class Example extends Thread{ public static void main(String[] args) { //创建线程对象 Example thread = new Example(); //线程启动 thread.start(); } public void run() {//run 方法 System.out.println("线程运行了......"); } }
程序运行结果如下图:
package test; /** * 线程创建 * * 实现Runnable接口 * * @author lx * */ public class Example implements Runnable{ public static void main(String[] args) { //创建Example实例对象 Example example = new Example(); //创建线程对象 Thread thread = new Thread(example); //线程启动 thread.start(); } public void run() {//run 方法 System.out.println("线程运行了......"); } }
程序结果如下图:
线程实现方法总结
由上面两个代码运行结果得出:继承Thread类和实现Runnable接口都能实现多线程。
线程生命周期及状态转换
线程周期分为五个状态,分别是新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked),死亡状态(Terminated)。
新建状态(New)
当线程对象被创建的时候,线程的生命周期遍开始了,这时它还不能运行,和其他java对象一样,仅仅由java虚拟机为其分配内存;
就绪状态(Runnable)
当start()方法调用时,该线程进入就绪状态。处于就绪状态的线程位于可运行池中。
运行状态(Running)
如果处于就绪状态的线程获得CPU使用权,开始执行run方法中的代码,则该线程处于运行状态。
阻塞状态(Blocked)
一个正在执行的线程由于某种特殊情况如输入输出时,会舍弃CPU使用权,进入阻塞状态。当特殊情况处理完后不是立即进入运行状态,而是转入就绪状态,等待系统调度。
死亡状态(Terminated)
当线程的的run()方法运行完毕或者线程抛出一个未捕获的异常、错误,线程就进入死亡状态。
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- C#实现终止正在执行的线程
- Java线程编程中的主线程讲解