Java多线程的一些必备基本概念

多线程

基本概念

程序(program)

  • 为了完成特定任务、用某种语言编写的一组指令的集合。即一段静态的代码静态对象

进程(process)

  • 程序的一次执行过程,或者是正在运行的一个程序,是动态过程。

  • 动态过程:有自身的产生、存在和消亡的过程。

  • 程序是静态的,而进程是动态的

线程(thread)

  • 进程可以进一步细化为线程,是一个程序内部的一条执行路径

  • 若一个程序可同一时间执行多个线程,那么这个程序就支持多线程。

Java中的线程

  • Java线程是依附于Java虚拟机中的本地线程来运行的,实际上是本地线程在执行Java线程代码,只有本地线程才是真正的线程实体。
  • Java代码中创建一个thread,虚拟机在运行期就会创建一个对应的本地线程,而这个本地线程才是真正的线程实体

多线程的用处

  • 发挥多核CPU的优势,大大提高效率
  • 防止多余的阻塞
    • 单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率 ,但是单核CPU我们还是要应用多线程,就是为了防止阻塞 。
    • 多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行
  • 方便进行业务拆分,提升应用性能

时间片

  • 时间片是CPU调度给各个线程的时间。

并行和并发

  • 并行:多个任务同时进行,必须有多核CPU的支持
  • 并发:指多个任务都请求运行,而处理器只能接受一个任务,就是把多个任务轮流进行,由于轮转时间间隔过短,让人感觉是多个任务都在同时运行。

同步和异步

  • 同步和异步通常用来形容一次方法调用。
  • 同步方法调用一开始,调用者必须等待被调用的方法执行结束后,才能执行后面的代码。
  • 异步方法调用后,调用者不用理会调用方法是否执行完毕,都会继续执行后面的代码,当被调用的方法完成之后会通知调用者。

临界区

  • 临界区表示一种公共资源,共享数据,可以被多个线程使用。
  • 一旦临界区资源被一个线程占用时其他线程必须等待其使用完毕后才能使用。

阻塞和非阻塞

  • 阻塞和非阻塞通常用来形容多线程之间的相互影响。
  • 当一个线程占用了临界区资源,那么其他线程需要这个资源就必须等待资源被那个线程释放,这就会导致等待的线程挂起,这种情况就是阻塞。
  • 非阻塞强调没有一个线程可以阻塞到其他线程,所有的线程都会尝试地往前运行。和阻塞正好相反。

问题引入

  1. Java程序的运行原理?

    • Java命令会启动Java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。这个进程会自动的启动一个主线程,然后主线程调用类中的main方法
    • 实际上java程序天生就是一个多线程程序,包含了:
      • (1)分发处理发送给给JVM信号的线程
      • (2)调用对象的finalize方法的线程
      • (3)清除Reference的线程;
      • (4)main线程,用户程序的入口
  2. JVM的启动是多线程吗?

    JVM的启动至少启动主线程垃圾回收线程,所以是多线程的。

猜你喜欢

转载自blog.csdn.net/hxhaaj/article/details/81004628