一、线程和进程概念详解 - 简单实用

一、进程和线程概念

进程:进程是一个很抽象的概念,指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。进程简单来理解就是每个应用都是一个进程。

线程:是用来执行具体功能和任务的,需要进程为载体,是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。

注:一个程序至少有一个进程,一个进程至少有一个线程(主线程),进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

二、进程和线程的区别

  • 操作系统资源管理方式是不一样的,进程有独立的地址空间,进程崩溃后会有保护模式让其不会对其他的进程产生影响。而线程则不然,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,所以一个线程挂掉可能影响整个进程挂掉。
  • 进程的并发性没有线程高。
  • 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中。由应用程序提供多个线程执行控制。
  • 对于应用程序来说,多线程是可以同时有多个执行部分同时执行。但对于操作系统来说是没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配

注:多线程容易调度,有效地实现并发性。对内存的开销比较小。创建线程比创建进程要快。

三、线程的状态

  • 创建:new了但是没有启动的线程的状态。比如"Thread t = new Thread()",t就是一个处于NEW状态的线程
  • 运行:创建完成之后,需要调用start()方法让线程在Java虚拟机中运行,让线程达到running状态。在虚拟机中可能是正在执行任务,也有可能是正在等待处理器的资源,线程必须获得CPU的资源才能运行run()方法。
  • 阻塞:有一个线程正在等待监视器锁,这个代表这个线程的进入blocked阻塞状态。
  • 等待:如果线程调用了 <不超时> wait()方法,join()方法,LockSupport的park()方法以后就会让线程处于一个waiting等待状态。
  • 等待超时:如果线程调用了指定正等待时间的Object的wait()方法、Thread的join()方法、Thread的sleep()方法、LockSupport的parkNanos()方法、LockSupport的parkUntil()方法,就会处于timed_waiting超时等待状态了。
  • 停止:线程调用终止或者run()方法执行结束后,线程就会处于terminated终止状态。

注:线程运行图

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值