1.进程与线程的区别和联系
进程概念:进程是表示资源分配的基本单位,又是调度运行的基本单位。
线程概念:线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位
引入线程的好处
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
(3)开销少。创建线程比创建进程要快,所需开销很少。。
(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
进程和线程的关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
在操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量;那么,在操作系统中再引入线程则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
,在操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量;那么,在操作系统中再引入线程则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
2.进程与程序的区别
1.进程是程序的一次运行活动,属于一种动态的概念。程序是一组有序的静态指令,是一种静态的概念。但是,进程离开了程序也就没有了存在的意义。因此,我们可以这样说:进程是执行程序的动态过程,而程序是进程运行的静态文本。如果我们把一部动画片的电影拷贝比拟成一个程序,那么这部动画片的一次放映过程就可比为一个进程。
2.一个进程可以执行一个或多个程序。例如:一个进程进行C源程序编译时,它要执行前处理、词法语法分析、代码生成和优化等几个程序。反之,同一程序也可能由多个进程同时执行,例如:上述C编译程序可能同时被几个程序执行,它们对相同或不同的源程序分别进行编译,各自产生目标程序。我们再次以动画片及其放映活动为例,一次电影放映活动可以连续放映几部动画片,这相当于一个进程可以执行几个程序。反之,一部动画片可以同时在若干家电影院中放映,这相当于多个进程可以执行几个同一程序。不过要注意的是,几家电影院放映同一部电影,如果使用的是同一份拷贝,那么实际上是交叉进行的。但在多处理机情况下,几个进程却完全可以同时使用一个程序副本。
3.程序可以作为一种软件资源长期保持着,而进程则是一次执行过程,它是暂时的,是动态地产生和终止的。这相当于电影拷贝可以长期保存,而一次放映活动却只延续1~2小时。
进程需要使用一种机构才能执行程序,这种机构称之为处理机(Processor)。处理机执行指令,根据指令的性质,处理机可以单独用硬件或软、硬件结合起来构成。如果指令是机器指令,那么处理机就是我们一般所说的中央处理机(CPU)。
3.java多线程实现方式及区别
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
在程序的开发中,只要是多线程,则肯定永远以实现Runnable接口为正统操作,因为实现Runnable接口相比于继承Thread类有如下好处:
避免单继承的局限,一个类可以实现多个接口;
适合于资源的共享(重要)
MyThread mt = new MyThread(); // 一个线程
new Thread(mt).start() ; // 开始卖票
new Thread(mt).start() ; // 开始卖票
new Thread(mt).start() ; // 开始卖票
联系:
·public class Thread extends Object implements Runnable:Thread类也是Runnable接口的子类。