首页 > 编程语言 > 详细

java多线程---进程和线程

时间:2019-09-20 02:13:57      阅读:93      评论:0      收藏:0      [点我收藏+]

进程和线程

 

什么是进程

  进程是操作系统运行的基本单元,进程就是一段程序的执行过程就是,我们打开电脑的任务管理器,可以看到很多程序正在执行,这些程序都是进程,腾讯QQ的执行时一个进程、微信的执行也是一个进程等等。

  进程是操作系统分配资源和调度的独立单位,它是程序执行的一个实例,腾讯QQ不是一个进程,腾讯QQ的执行时一个进程,进程是一个动态地概念,一个程序执行时系统就会为它创造一个进程,然后把该进程放到进程的就绪队列。

  进程分为就绪、执行、阻塞三个状态,就绪就是进程获得了除CPU以外的所有资源时的状态,处于就绪态的进程会位于一个等待队列里;当进程获得了CPU资源后该进程就处于运行态;当程序运行所需的条件不足时。那么进程就处于阻塞状态等待资源。

 

什么是线程

  线程是程序执行的最小单位,它是进程的一个执行程序流,是CPU调度和分配的最小单位。

  一个进程里面可以有多个单位,这些线程可以共享进程的资源,但是每个线程内都有自己的堆栈和局部变量,由于线程是由CPU调度和执行的,所以在多CPU的系统内可以有多个线程同时执行,同样的多个线程也可以在一个CPU内并发执行。

  线程在整个运行周期总共可以有6个状态,初始、就绪、执行、阻塞、等待、超时等待、终止状态。

  1、一个线程被构建还没有调用start()方法时,线程处于初始状态。

  2、当线程调用start()方法时,线程处于就绪状态,这时候线程就等待CPU资源即可执行。

  3、当线程竞争到CPU资源时,线程则运行即处于执行状态。

  4、当线程

等待进入synchronized块时、或者线程处于等待I/O时则处于阻塞态。

  5、当线程执行过程中调用object.wait()、object.join()、LockSupport.park()方法时,则线程进入等待状态,当调用object.notify()、object.notifyAll()、LockSupport.unpark(Thread)时则线程从等待状态进入就绪状态。

  6、超时等待状态其实与等待状态类似,只是在调用等待方法的时候加了一个超时返回的实际罢了。

  7、当线程执行完毕,该线程就处于终止状态了。

 

进程和线程的区别

  1、进程是资源分配的基本单位,线程是程序执行的基本单位。

  2、进程有自己的地址空间,每启动一个进程,系统就会为其分配地址空间,同时建立数据表来维护代码段、堆栈段和数据段,这些操作是非常昂贵的,但是是共享进程中的数据的,都是同一个地址空间,所以CPU在切换一个线程的花费远小于一个线程的,同时创建一个线程的开销也比较小。

  3、线程之间共享数据十分方便,同一个进程下的线程共享全局变量和静态变量,但是进程间的通信比较麻烦。

  4、多进程更加健壮,一个进程死掉不会影响其他进程的执行,但是线程不一样,由于同一个进程下的多个线程是共享进程中的资源的,所以如果一个线程死掉则会严重影响其他线程的执行。  

java多线程---进程和线程

原文:https://www.cnblogs.com/rhodesis/p/11553370.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!