进程和线程

进程(Process)是程序执行时的一个实例,是系统进行资源分配和调度的基本单位。进程由程序段、数据段和进程控制块组成。

线程(Threads)是进程内的一个执行实体,是CPU调度和分派的基本单位。一个进程可以有一个或多个线程,同一进程内的线程共享进程的数据和地址空间,每个线程有自己的堆栈和局部变量。

进程和线程的区别

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

  • 线程在调度和切换时比进程快得多。

  • 进程间通信方式:管道、消息队列、信号量、共享内存、套接字。线程间通信的目的是线程同步,包括互斥锁、临界区、信号量。

并发和并行

  • 并发:抢占CPU时间片,多个进程被快速的轮换执行,但同一时刻只有一个进程被执行。

  • 并行:不抢占CPU资源,多个进程在多个CPU被同时执行。

线程状态

  • 新建(New):创建一个线程对象。

  • 就绪(Runnable):线程对象创建后,其它线程调用了该对象的start()方法。就绪状态的线程位于可执行线程池中,等待获取CPU时间片。

  • 运行(Running):就绪状态的线程获取到了CPU时间片,执行程序代码。

  • 阻塞(Blocked):运行状态的线程由于某种原因放弃了CPU资源,临时中止执行。线程阻塞结束,进入就绪状态。

  • 死亡(Dead):线程运行结束或者因异常终止。

阻塞的三种情况:

(1)等待阻塞:运行状态的线程调用wait()方法,JVM会把该线程放入等待池中。

(2)同步阻塞:运行状态的线程在获取对象的同步锁时,该同步锁被别的线程占用,JVM会把该线程放入锁池中。

(3)其它阻塞:运行状态的线程调用sleep()或join()方法,或者发出了I/O请求,JVM会把该线程置为阻塞状态。

posted @ 2019-09-23 19:08  PIPO2  阅读(131)  评论(0编辑  收藏  举报