在互联网公司面试中,很多小伙伴都被问到过关于锁的问题。 今天,我给大家一次性把 Java 并发锁的全家桶彻底讲明白。包括互斥锁、读写锁、重入锁、公平锁、悲观锁、 自旋锁 、偏向锁等等等等。视频有点长,大家一定要全部看完,保证你会醍醐灌顶。1、锁的由来 在并发编程中,经常会遇到两个以上的 线程 访问同一个共享变量,当同时对共享变量进行读写操作时,就会产生数据 ......
243
0
0
2023-09-17
前言 在 Java 开发的web项目中,我们经常会遇到接口响应耗时过长,或者定时任务处理过慢,那在Java中最常见的解决方法就是并行了,想必大家也都不陌生了。 今天的分享主要带大家从一个实际的 串行 场景出发,如何一步步优化,同时也会分享在Java中实现并行处理的多种方式,以及它们之间的区别和优缺点,通过对比总结更加深入的了解并且使用Java中并发编 ......
273
0
0
2023-09-09
本文开始介绍并发队列,为后面介绍 线程池 打下基础。并发队列莫非也是 出队 、 入队 操作,还有一个比较重要的点就是如何保证其 线程安全性 ,有些并发队列保证 线程安全 是通过 lock ,有些是通过 CAS 。 我们从 ConcurrentLinkedQueue 开始吧。 1. 介绍 Co ......
236
0
0
2023-09-04
1. 为什么要写这篇文章几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。类似地,去年RxJava 和 ......
359
0
0
2023-09-03
本文简要介绍 Java 并发编程方面常用的类和集合,并介绍下其实现原理。 AtomicInteger 可以用原子方式更新int值。类 Atomic boolean 、AtomicInteger、AtomicLong 和 AtomicReference 的实例各自提供对相应类型单个变量的访问和更新。基本的原理都是使用CAS操作: boolean c ......
227
0
0
2023-09-03
目录:一.生产者和消费者模式 二.线上问题定位 三.性能测试 四.异步任务池 当你在进行并发编程时,看着程序的执行速度在自己的优化下运行得越来越快,你会觉得越来越有成就感,这就是并发编程的魅力。但与此同时,并发编程产生的问题和风险可能也会随之而来。一.生产者和消费者模式 线程通信 ,在 多线程 系统中,不同的线程执行不同的任务;如果这些任务之间存在联系, ......
228
0
0
2023-09-02
分治法分治法是计算机领域常用的算法中的其中一个,主要思想就是将将一个规模为N的问题,分解成K个规模较小的子问题,这些子问题相互独立且与原问题性质相同;求解出子问题的解,合并得到原问题的解。 解决问题的思路分割原问题; 求解子问题; 合并子问题的解为原问题的解。 使用场景二分查找,阶乘计算,归并排序,堆排序、快速排序、傅里叶变换都用了分治法的思想。 ForkJ ......
257
0
0
2023-07-20
一、经典的生产者消费者案例上一篇文章我们提到一个应用可以创建多个线程去执行不同的任务,如果这些任务之间有着某种关系,那么线程之间 必须能够通信 来协调完成工作。 生产者消费者问题 (英语:Producer-consumer problem)就是典型的多线程同步案例,它也被称为 有限缓冲问题 (英语:Bounded-buffer problem)。该问题描述了 ......
298
0
0
2023-07-17
环境:jdk1.8。关于并发方面的,juc已帮我们提供了很多好用的工具,而谷歌在此基础上做了扩展,使并发编程更容易,这些工具放在guava.jar包中。本文演示几个简单的案例,见一下guava的效果。需要先了解的一些技术:juc中的线程池、Excecutors、ExecutorService、Callable、Futureguava maven配置 < ......
231
0
0
2023-07-17
今天的文章将给大家分享Java并发编程相关的知识点,虽然类似的文章已有很多,但本文将以更贴近实际使用场景的方式进行阐述。具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果,从而为后续更深入的理解Java并发机制进行铺垫。 Java多线程概述在Java中使用多线程是提高程序并发响应能力的重要手段,但同时它也 ......
261
0
0
2023-07-17
带着BAT大厂的面试问题去理解请带着这些问题继续后文,会很大程度上帮助你更好地理解相关知识点。什么是AQS? 为什么它是核心?AQS的核心思想是什么? 它是怎么实现的? 底层数据结构等AQS有哪些核心的方法?AQS定义什么样的资源获取方式? AQS定义了两种资源获取方式:独占(只有一个线程能访问执行,又根据是否按队列的顺序分为公平锁和非公平锁,如Reentr ......
239
0
0
2023-07-11
什么是JUC? JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些东西 该包的位置位于java下面的rt.jar包下面 4大常用并发工具类:CountDownLatchCyclicBarrierSemaphore ExChangerCountDownLatch:CountDownLatch,俗称闭锁,作 ......
236
0
0
2023-07-09
作为开发者,CPU在我们的工作中扮演了核心角色,因此了解 处理器 内部的工作方式对程序员来说不无裨益。CPU是如何工作了呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到底都意味着什么呢?应用程序通常会将CPU看作是黑盒子。程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从CPU ......
294
0
0
2023-07-02
目录正文并发导致的Data Racing问题同步控制--synchronized同步实例方法和代码块同步静态方法线程挂起和唤醒线程等待--join总结正文使用多线程并发处理,目的是为了让程序更充分地利用CPU ,好能加快程序的处理速度和用户体验。如果每个线程各自处理的部分互不相干,那真是极好的,我们在程序主线程要做的同步控制最多也就是等待几个工作线程的执行完 ......
230
0
0
2023-06-26
前言当我们对List进行遍历的时候,如果list被修改了会抛出java.util.ConcurrentModificationException错误。那么有没有办法在遍历一个list的时候,还向list中添加元素呢?办法是有的,我们可以使用java.util.concurrent包中的CopyOnWriteArrayList。CopyOnWrite容器Cop ......
258
0
0
2023-06-18