categories: 多线程


Java 多线程方面的考点

8-1 进程和线程的区别

选择jdk8、jdk11来讲课

oracle支持的时间更长
image.png

进程和线程的由来

批处理过程中,cpu会等待io读取数据,这是批处理劣势
线程让进程的内部并发变成可能。
线程的引入:人们都实时性有了要求。
image.png
一个进程在一段时间内只做一件事情,如果一个进程有多个任务,只能逐个地去执行这些子任务,而往往子任务之间的顺序不存在依赖,是可以并发执行的。既然cpu可以按照时间片的方式轮流切换去跑进程,能不能给这些子任务打一个标签,让cpu按照更细的时间片去执行子任务呢?引入了线程,线程共享进程的内存资源。不需要切换页目录等。
进程让系统的并发性变成可能,而线程让进程的内部并发变成可能。
宏观不断细化,从而每个部分进行控制,学习也是,宏观的学习没有具体细节的动手更好。
image.png
线程的组成也要记住。

image.png

总结

  • 线程不能看做独立应用,而进程可看做独立应用
  • 进程有独立的地址空间,相互不应先,线程只是进程的不同执行路径
  • 线程没有独立的地址空间,多进程的程序比多线程程序更健壮
  • 进程的切换比线程的切换开销大

    Java进程和线程的关系

    - Java对操作系统提供的功能进行封装,包括进程和线程

  • 运行一个程序会产生一个进,进程包含至少一个线程

  • 每个进程对应一个JVM实例,多个线程共享JVM里的堆
  • Java采用单线程编程模型,程序会自动创建主线程
  • 主线程可以创建子线程,原则上要后于子线程完成执行

    补充知识

    一个程序是一个可执行的文件,而一个进程则是一个执行中程序的实例,CurrentThreadDemo 便可以称之为进程。虽然只有一个线程来执行任务,但是并不代表jvm中只有一个线程,jvm在创建实例时,同时会创建很多其他的线程,比如GC等。主要分析的时线程,进程分析为辅。

    额外知识

  • linux的用户态和内核态是如何进行转换的,为什么要进行转换?

  • 什么是系统中断?内核态的多线程是如何通过轻量级的线程方式实现的?
  • 将其融入到多线程的相关知识中,立马能提升你的档次。