美文网首页
Java进程和线程

Java进程和线程

作者: Andy丫 | 来源:发表于2019-04-06 20:17 被阅读0次
  1. 定义

进程
是指一个内存中运行中的应用程序,进程是系统进行资源分配的最小单位。

线程
进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  1. 关系
    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
    一个进程至少包含一个线程。
    Java程序的进程里至少包含主线程和垃圾回收线程(后台线程)

  2. 进程与线程的区别
    进程有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的。

    线程堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之
    间是可以影响的。

    相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其
    他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

  3. 线程调度
    计算机通常只有一个CPU时,在任意时刻只能执行一条计算机指令,每个线程只有获得CPU的使用权才能执行指令
    所谓多线程并发运行,从宏观看,其实各个线程轮流获得CPU的使用权,分别执行各自的任务。那么,在可运行池中,会有多个线程处于就绪状态等到CPU,JVM就负责了线程的调度,
    JVM采用的时抢占式调度,因此可能造成多线程执行结果的随机性

  4. Java线程的状态

  • 新建状态(New)
    当线程对象对创建后,即进入了新建状态,如:
   Thread thread = new Thread();
  • 就绪状态(Runnable)
    当调用线程对象的start()方法,线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
  • 运行状态(Running)
    当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。
  • 阻塞状态(Blocked)
    处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
    1. 等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
    2. 同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
    3. 其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
  • 死亡状态(Dead)
    线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

相关文章

网友评论

      本文标题:Java进程和线程

      本文链接:https://www.haomeiwen.com/subject/isbriqtx.html