多线程

线程和进程的区别

进程和线程的区别(超详细)

进程

一个在内存中运行的应用程序. 每一个进程都有自己独立的内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xxx.exe就是一个进程.

线程

进程中一个执行任务控制单元,负责当前进程中程序的执行.一个进程至少有一个线程,一个进程可以运行多个线程,多个线程共享数据.

与进程不同的是同类的多个线程共享进程的方法区资源,但每个线程有自己的程序计数器,虚拟机栈,本地方法栈,所以系统在产生一个线程或是各个线程间作切换工作时,负担要比进程小得多.线程也被称为轻量级进程.

进程与线程的区别总结

  • 根本区别: 进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位.
  • 资源开销:
    • 进程: 每个进程都有独立的代码和数据空间(程序上下文),程序将的切换会有较大的开销.
    • 线程: 看作轻量级的进程,同一线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换开销较小.
  • 包含关系: 如果一个进程内有多个线程,则执行过程不是一条线程,而是多条线程共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或轻量级进程.
  • 内存分配: 同一个进程的线程共享本进程的地址空间和资源,而进程之间的空间和资源是相互独立的.
  • 影响关系: 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都会死掉.所以多进程比多线程健壮.
  • 执行过程: 每个独立的进程有程序的入口\顺序执行序列\程序出口.但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行.

什么是上下文切换?

上下文切换是指操作系统在多任务处理中,暂停当前任务的执行并保存它的状态信息,然后加载下一个任务的状态信息,使得下一个任务能够继续执行。在任务执行完毕或者发生中断时,操作系统会再次进行上下文切换,将之前保存的任务的状态信息恢复到处理器中并继续执行。上下文切换是实现多任务处理的重要技术,但频繁的上下文切换会带来性能开销。

什么是线程死锁?如何避免死锁?

乐观锁和悲观锁了解么?

【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?

说说 sleep() 方法和 wait() 方法区别和共同点?

Java中sleep()方法和wait()方法的异同点

Java 线程池有哪些参数?阻塞队列有几种?拒绝策略有几种?新线程添加的流程?

Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略

Java-五种线程池,四种拒绝策略,三类阻塞队列