写点什么

Java 并发体系详解,聊一聊 MySQL 数据库中的那些锁

  • 2022 年 4 月 22 日
  • 本文字数:1723 字

    阅读完需:约 6 分钟


在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的:


线程共享:元数据区、堆 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、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。


作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java并发体系详解,聊一聊MySQL数据库中的那些锁_Java_爱好编程进阶_InfoQ写作社区