Java 并发体系详解,聊一聊 MySQL 数据库中的那些锁
在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的:
线程共享:元数据区、堆 Heap;
线程私有:虚拟机栈、本地方法栈、程序计数器;
单个 CPU 在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢 CPU 的执行时间段。
三、常见概念
======
1、线程优先级
线程调度器倾向执行线程优先级高的线程,线程优先级高说明获取 CPU 资源的概率高,或者获取的执行时间分片多,被执行的概率高但不代表优先级低的一定最后执行。
2、守护线程
守护线程是支持辅助型线程,主要在程序中起到调度和支持性作用,当 Jvm 中非守护线程全部结束,守护线程也就会结束。
3、线程加入
线程 A 中,执行线程 B 的加入方法,那么 A 线程就会等待线程 B 执行完毕再返回继续执行。
4、本地线程
ThreadLocal 也叫做线程本地变量,为变量在每个线程中的创建副本,每个线程可以访问自己内部的副本变量,线程之间互不相互影响。
推荐观看:[传送门](()
=======================================================
四、线程安全
======
在上图线程与内存空间的占用方式看,在线程访问共享内存块时,保证线程安全就很有必要。
1、同步控制
Synchronized 关键字同步控制,可以修饰方法,修饰代码块,修饰静态方法等,同步控制的资源少,可以提高多线程效率。
2、加锁机制
Lock 接口:Java 并发编程中资源加锁的根接口之一,规定了资源锁使用的几个基础方法。
ReentrantLock 类:实现 Lock 接口的可重入锁,即线程如果获得当前实例的锁,并进入任务方法,在线程没有释放锁的状态下,可以再次进入任务方法,特点:互斥排它性,即同一个时刻只有一个线程进入任务。
Condition 接口:描述可能会与锁有关联的条件变量,提供了更强大的功能,例如在线程的等待/通知机制上,Conditon 可以实现多路通知和选择性通知。
3、Volatile 关键字
volatile 修 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 饰成员变量,不 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 能修饰方法,即标识该线程在访问这个变量时需要从共享内存中获取,对该变量的修改,也需要同步刷新到共享内存中,保证了变量对所有线程的可见性。
五、线程通信
======
线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题,甚至死锁现象,线程之间协调工作,就需要通信机制来保障。
1、基础方法
相关方法是 Java 中 Object 层级的基础方法,任何对象都有该方法:notify()随机通知一个在该对象上等待的线程,使其结束 wait 状态返回;wait()线程进入 waiting 等待状态,不会争抢锁对象,也可以设置等待时间;
2、等待/通知机制
等待/通知机制,该模式下指线程 A 在不满足任务执行的情况下调用对象 wait()方法进入等待状态,线程 B 修改了线程 A 的执行条件,并调用对象 notify()或者 notifyAll()方法,线程 A 收到通知后从 wait 状态返回,进而执行后续操作。两个线程通过基于对象提供的 wait()/notify()/notifyAll()等方法完成等待和通知间交互,提高程序的可伸缩性。
3、管道流通信
管道流主要用于在不同线程间直接传送数据,一个线程发送数据到输出管道,另一个线程从输入管道中读取数据,进而实现不同线程间的通信。
六、线程池
=====
1、Executor 接口
Executor 系统中,将线程任务提交和任务执行进行了解耦的设计,Executor 有各种功能强大的实现类,提供便捷方式来提交任务并且获取任务执行结果,封装了任务执行的过程,不再需要 Thread().start()方式,显式创建线程并关联执行任务。
2、核心参数
最后
关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份 pdf 文档内,分成了以下几大专题:
Java 基础部分
算法与编程
数据库部分
流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)
这份面试文档当然不止这些内容,实际上像 JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。
作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。
评论