如何理解程序、进程、线程?
三者之间的形象化理解:
程序:代码实现了功能,就是程序,是静态的;程序是存储在磁盘上。
例如:实现eclipse的代码
进程:执行中的程序就是进程,是动态的;
例如:运行eclipse出现的界面
线程:进程内的一个执行单元,也是进程内的可调度实体,可以并发执行提高了进程的效率。
程序与进程的区别:
程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
进程更能真实地描述并发,而程序不能;进程是由程序和数据两部分组成的。
进程具有创建其他进程的功能,而程序没有。
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。
为什么我们要引入线程这个概念,有进程不可以处理计算机要求的任务了吗?
(1)进程只能在同一时间干一件事情,如果想同时干两件事或多件事情,进程就无能为力了。
(2)进程在执行的过程中如果由于某种原因阻塞了,例如等待输入,整个进程就会挂起,其他与输入无关的工作也必须等待输入结束后才能顺序执行。
进程和线程的区别:
线程是进程的一个实体,也是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时又被称为轻权进程或轻量级进程,相对进程而言,线程是一个更加接近于执行体的概念,进程在执行过程中拥有独立的内存单元,而线程自己基本上不拥有系统资源,也没有自己的地址空间,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。除了CPU 之外,计算机内的软硬件资源的分配与线程无关,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程和线程的主要差别在于操作系统并没有将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些,对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
Java实现线程的方式有哪些?
Runnable 接口
run() 线程的运行方法
把Runnable接口的对象转换为Thread类的对象。
Thread 类,是Runnable接口的子类
run() 线程的运行方法
start() 线程的启动方法
sleep(long time) 线程的休眠方法,单位是毫秒
[code]package thread; /* * 定义Test类 */ public class Test { public int i; public Test(int i) { this.i = i; } }
[code]package thread; /* * 定义ThreadDemo类继承Thread类 */ public class ThreadDemo implements Runnable { // extends Thread { private Test t; // Test类作为属性 public ThreadDemo(Test t) { // 构造方法 this.t = t; } /* * 重写run方法(线程运行方法) */ public void run() { while (t.i < 20) { t.i++; System.out.println(Thread.currentThread() + "1 " + t.i); } } /* * 主函数入口 */ public static void main(String[] args) { Test test = new Test(10); // 实例化Test对象 System.out.println(Thread.currentThread() + "2 " + test.i); for (int i = 0; i < 10; i++) { ThreadDemo td = new ThreadDemo(test); // 实例化ThreadDemo类的对象 // td.start(); Thread thread = new Thread(td); // 自动转换类型,td相当于Runnable子类对象 thread.start(); // 调用start方法 } System.out.println(Thread.currentThread() + "3 " + test.i); } }
- C# 开发技巧]如何防止程序多次运行 线程 进程
- C# 开发技巧]如何防止程序多次运行 线程 进程
- 理解线程或进程数是如何拥有互斥锁(CreateMutex)
- 分析理解程序,进程,线程
- 谈谈对进程的理解?谈谈你对线程的理解?2.进程死锁的原因?如何解决进程死锁?
- 如何更直观理解进程、线程、事务的概念
- 进程,线程,程序的理解以及区别
- 关于程序,进程,线程。程序个人理解:应用程序是一个车间,进程是一条生产线,线程是机器
- 深入理解Linux之进程的创建和可执行程序的加载
- Linux中如何让进程(或正在运行的程序)到后台运行?
- 程序、进程和线程的关系
- java程序中,如何安全的结束一个正在运行的线程?
- 如何在一个进程中启动另外一个线程:ProcessStartInfo Constructor
- android中的进程与线程的理解
- windows和linux进程与线程的理解
- Linux上如何查看某个进程的线程
- 程序 进程 线程
- 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件
- Python:一个小小程序,如何删除一组进程,而且只提供程序名而不需要pid。
- Linux 如何查看进程的各线程的CPU占用