JUC并发编程-高级篇
1. JUC并发编程介绍
- JUC是什么
- 指 java.util.concurrent 在并发编程中使用的工具包
- JUC就是Java.util.concurrent工具包,实现并发编程
2. 线程基础知识
- 线程的重要性
- 硬件方面
- 由于摩尔定律失效,在主频不再提高且核数不断增加的情况下,要想让程序更快就要用到并发或并行编程
- 软件方面
- 并发编程面试加分
- 充分利用多核处理器,在主频不再变快且核数不断增加时,此时想提高运行效率就要使用并发编程
- 提高程序性能,高并发执行
- 通过程序吞吐量,异步+回调
- 弊端以及问题
- 线程安全问题,会出现并发修改问题,且集合类是线程不安全的
- 线程死锁问题
- 线程性能问题
- 硬件方面
- start一个线程,先调用底层C语言,再调用OS去创建一个线程
-
start()后才会创建线程执行操作,且底层是调用的OS内核native的方法start0()
-
native调用的是底层C语言的函数,Java语言本身底层就是C++
-
native是OS内核的C语言方法,且Java底层就是C++
-
Java的OpenJDK源码就是用C语言实现
-
调用start0()就是调用底层C语言的方法来去OS内核中创建线程
-
Java底层就是使用C++实现,且native函数就是调用调用C++方法去OS中创建线程
![![[attachments/Pasted image 20241127125655.png]]](/https://i-blog.csdnimg.cn/direct/27383fa72d024fcdad4dd301c89ca328.png)
-
当调用start后会调用 native start0(),此时是调用thread.c中的方法,去jvm.cpp中调用JVM中的方法,再调用OS提供的方法来创建线程
-
Java的底层使用C++进行实现,调用start()后先调用C++文件去JVM中配合OS来创建一个操作系统层次的线程
-
- Java多线程相关概念
- 1把锁:Synchronized
- 2个并:并发Concurrent(同一个时间间隔内交替执行)和并行Parallel(同一时刻同时执行)
- 并发是多个任务在同一个实体上交替执行
- 并行是多个任务在多个实体上同时执行
- 3个程:进程、线程和管程
- 进程就是程序的一次执行过程,是资源分配的基本单位,线程是CPU调度的基本单位,一个进程中可以有多个线程,线程就是轻量级线程
- 进程是资源分配的基本单位,就是程序的执行过程,线程是轻量级的进程,是CPU调度的基本单位,一个进程中可以有多个线程
- 一个进程中可以有多个线程
- 管程是实现同步的一种机制,保证同一时刻只可以有一个进入管程中对共享数据进行操作,在管程内部维护多个共享数据,每次保证只可以一个进入管程访问
- 管程Monitor也就是锁,内部存放多个共享数据,确保同一时刻只可以有一个线程来进行访问,从而可以实现同步
- 每一个对象都有一个Monitor对象,都可以作为一个锁,会和对象同时销毁,底层通过C++实现
- 每个对象都是一个锁,当执行同步方法时就会被占用,即每一个对象只可以同时执行一个同步方法,
- 每一个对象都是一个锁,执行同步方法时就会占用该对象的锁,每一个对象只可以同时执行一个同步方法,但可以同时执行多个非同步方法
- 每一个对象都是一个锁,都有一个管程对象,当执行Synchronized同步方法时,此时会先得到对象的管程,然后再执行方法,此时就无法再获得对象的管程了,故每个对象只可以同时执行一个同步方法
- 用户线程和守护线程
- 用户线程就是我们自定义创建的线程,可以继承Thread类,或者实现Runnable接口以及用Callable接口创建FutureTask类对象来创建线程**,当主线程结束而用户线程未结束时,JVM不会结束
- 守护线程就是运行在后台的线程,当主线程结束时,守护线程也会结束

685

被折叠的 条评论
为什么被折叠?



