Java零基础进阶篇之多线程详解(一)

​​​​​​本篇文章讲解的知识点主要围绕多线程,废话不多说,只分享Java相关的干货!

多线程的基本概念

线程指进程中的一个执行场景,也就是执行流程,那么进程和线程有什么区别呢?

  1. 每个进程是一个应用程序,都有独立的内存空间
  2. 同一个进程中的线程共享其进程中的内存和资源

共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的。)

 

什么是进程?

一个进程就是一个应用程序。在操作系统中每启动一个应用程序就会相应的启动一个进程。例如:千千静听进程,魔兽进程,Word 进程,QQ 进程,JVM 启动对应一个进程。

 

系统引入多进程的作用?

最初的计算机是“单进程的”,计算机只能运行一个应用程序,例如第一台计算机只有DOS 窗口。现代的计算机可以满足我们一边听音乐,一边玩游戏。现代的计算给我们人类感觉:多件事情一起运行。感觉是并行的(错觉)。

对于单核的计算机来讲,在某一个时间点上只能做一件事情,但是由于计算机的处理速度 很高,多个进程之间完成频繁的切换执行,这个切换速度使人类产生了错觉,人类的错觉是:多个进程在同时运行。

计算机引入多进程的作用:提高 CPU 的使用率重点:进程和进程之间的内存独立。

 

什么是线程?

线程是进程的一个执行场景。一个进程可以启动多个线程。

 

进程引入多线程的作用?

提高进程的使用率。

重点:线程和线程之间栈内存独立,堆内存和方法区内存共享。一个线程一个栈。

 

描述 java 程序的执行原理:

java 命令执行会启动 JVM,JVM 的启动表示启动一个应用程序,表示启动了一个进程。该进程会自动启动一个“主线程”,然后主线程负责调用某个类的 main 方法。所以 main 方法的执行是在主线程中执行的。然后通过main 方法代码的执行可以启动其他的“分支线程”。

所以,main 方法结束程序不一定结束,因为其他的分支线程有可能还在执行。

 

​​​​​​​线程的创建和启动

Java 虚拟机的主线程入口是main 方法,用户可以自己创建线程,创建方式有两种

  1. 继承 Thread 类
  2. 实现Runnable 接口(推荐使用Runnable 接口

 

​​​​​​​继承 Thread 类

Thread 类中创建线程最重要的两个方法为:

public void run()

public void start()

采用 Thread 类创建线程,用户只需要继承 Thread,覆盖 Thread 中的run 方法,父类 Thread 中的run 方法没有抛出异常,那么子类也不能抛出异常,最后采用start 启动线程即可

【示例代码】,不使用线程

Java零基础进阶篇之多线程详解(一)_第1张图片

Java零基础进阶篇之多线程详解(一)_第2张图片

以上顺序输出相应的结果(属于串行),也就是run 方法完全执行完成后,才执行method1 方法,也就是method1 必须等待前面的方法返回才可以得到执行,这是一种“同步编程模型

【代码示例】,使用线程

Java零基础进阶篇之多线程详解(一)_第3张图片

Java零基础进阶篇之多线程详解(一)_第4张图片

Java零基础进阶篇之多线程详解(一)_第5张图片

通过输出结果大家会看到,没有顺序执行,而在输出数字的同时执行了 method1()方法,如果从效率上看,采用多线程的示例要快些,因为我们可以看作他是同时执行的,mthod1()方法没有等待前面的操作完成才执行,这叫“异步编程模型”

 

​​​​​​​实现 Runnable 接口

其实 Thread 对象本身就实现了Runnable 接口,但一般建议直接使用 Runnable 接口来写多线程程序,因为接口会比类带来更多的好处

【示例代码】

Java零基础进阶篇之多线程详解(一)_第6张图片

Java零基础进阶篇之多线程详解(一)_第7张图片

Java零基础进阶篇之多线程详解(一)_第8张图片

​​​​​​​线程的生命周期

线程的生命周期存在五个状态:新建、就绪、运行、阻塞、死亡

Java零基础进阶篇之多线程详解(一)_第9张图片

  • 新建:采用new 语句创建完成就绪:执行start 后
  • 运行:占用CPU 时间
  • 阻塞:执行了wait 语句、执行了sleep 语句和等待某个对象锁,等待输入的场合终止:退出run()方法

有的书籍上对线程的生命周期是做如下定义的。

Java零基础进阶篇之多线程详解(一)_第10张图片

以上就是多线程相关的知识点,持续更新中,配套视频教程,正在学习Java的同学们一定要关注哦~~

Java零基础进阶视频教程

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java学习者入门必备,Java纯干货,Java学习视频教程,python,多线程,java,编程语言,面试)