当前位置:主页 > 查看内容

【Java面试】程序,进程,线程之间的关系

发布时间:2021-05-09 00:00| 位朋友查看

简介:概念 程序 一组计算机能识别和执行的指令运行于电子计算机上满足人们某种需求的信息化工具。计算机需要加载代码同时也要加载数据。 进程 进程是指计算机中已运行的程序是系统进行资源分配和调度的基本单位是操作系统结构的基……

概念:

  • 程序:一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。计算机需要加载代码,同时也要加载数据。
  • 进程:进程是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。进程是程序真正运行的实例,若干进程可能与同一个程序相关,且每个进程皆可以同步或异步的方式独立运行。
  • 线程:线程是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是行程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务,线程是独立调度和分派的基本单位。
  • 特点:
    轻型实体,独立调度和分派的基本单位,可并发执行共享进程资源
  • 进程线程区别联系:线程是进程划分成的更?的运?单位。线程和进程最?的不同在于基本上各进程是独?的,?各线程则不?定,因为同?进程中的线程极有可能会相互影响。从另??度来说,进程属于操作系统的范畴,主要是同?段时间内,可以同时执??个以上的程序,?线程则是在同?程序内?乎同时执??个以上的程序段。

线程状态:

在这里插入图片描述

? 新生状态(New)

用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。

? 就绪状态(Runnable)

处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。

4种原因会导致线程进入就绪状态

  1. 新建线程:调用start()方法,进入就绪状态;

  2. 阻塞线程:阻塞解除,进入就绪状态;

  3. 运行线程:调用yield()方法,直接进入就绪状态;

  4. 运行线程:JVM将CPU资源从本线程切换到其他线程。

? 运行状态(Running)

在运行状态的线程执行自己run方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些“导致阻塞的事件”而进入阻塞状态。

? 阻塞状态(Blocked)

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。

4种原因会导致阻塞

  1. 执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。

  2. 执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入 就绪状态。

  3. 线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。

  4. join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时,使用join()方法。

? 死亡状态(Terminated)

死亡状态是线程生命周期中的最后一个阶段,当一个线程进入死亡状态以后,就不能再回到其它状态了。

线程死亡的原因有两个

  1. 正常运行的线程完成了run()方法内的全部工作;

  2. 程被强制终止,如通过执行stop()或destroy()方法来终止一个线程(已过时)

;原文链接:https://blog.csdn.net/m0_46495243/article/details/115448438
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐