摘要: Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析 上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列。 但是BlockingQueue的实现类中,有一种阻塞队列比较特殊,就是SynchronousQueue(同步移交队列),队列长度为0。 阅读全文
posted @ 2022-11-23 17:43 一灯架构 阅读(154) 评论(0) 推荐(3) 编辑
摘要:  面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间? 面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的? 这面试官是不是想坑我?是不是摆明了不让我通过? 难道你不应该问线程池有哪些核心参数?每个参数具体作用是什么? 阅读全文
posted @ 2022-11-18 10:14 一灯架构 阅读(1231) 评论(13) 推荐(4) 编辑
摘要: 还不懂Java线程池实现原理,看这一篇文章就够了 线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天一灯就带大家一块剖析线程池底层实现原理。 阅读全文
posted @ 2022-11-16 10:30 一灯架构 阅读(610) 评论(1) 推荐(0) 编辑
摘要: 干货,深入剖析ReentrantLock源码,推荐收藏 ReentrantLock和Synchronized都是Java开发中最常用的锁,与Synchronized这种JVM内置锁不同的是,ReentrantLock提供了更丰富的语义。可以创建公平锁或非公平锁、响应中断、超时等待、按条件唤醒等。在某些场景下,使用ReentrantLock更适合,功能更强大。 阅读全文
posted @ 2022-11-14 10:09 一灯架构 阅读(189) 评论(0) 推荐(1) 编辑
摘要: 硬核剖析Java锁底层AQS源码,深入理解底层架构设计 我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。 上篇文章讲了AQS的加锁流程,这篇文章再一块看一下AQS具体源码实现。 阅读全文
posted @ 2022-11-11 10:04 一灯架构 阅读(341) 评论(0) 推荐(4) 编辑
摘要: 重大发现,AQS加锁机制竟然跟Synchronized有惊人的相似 在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。Synchronized是基于JVM实现,而ReentrantLock是基于Java代码层面实现的,底层是继承的AQS。 AQS全称AbstractQueuedSynchronizer,即抽象队列同步器,是一种用来构建锁和同步器的框架。 阅读全文
posted @ 2022-11-09 10:33 一灯架构 阅读(335) 评论(4) 推荐(0) 编辑
摘要: 死磕Java面试系列:深拷贝与浅拷贝的实现原理 深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝。 阅读全文
posted @ 2022-11-07 11:20 一灯架构 阅读(409) 评论(2) 推荐(0) 编辑
摘要: 死磕面试系列,Java到底是值传递还是引用传递? Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意。 可能很多同学能够很轻松的背出JVM、分布式事务、高并发、秒杀系统、领域模型等高难度问题,但是对于Java基础问题不屑一顾。这种抓大放小的初衷是对的,要是碰到深究基础细节的面试官,就抓瞎了。 阅读全文
posted @ 2022-11-04 10:32 一灯架构 阅读(376) 评论(0) 推荐(1) 编辑
摘要: 夯实Java基础,一篇文章全解析线程问题 操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程 ,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。 有了进程,为什么还要线程?因为进程的成本太高了。 启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。线程可以看作轻量化的进程。线程之间使用相同的地址空间,切换线程的时间远小于切换进程的时间。 进程是资源分配的最小单位,而线程是CPU调度的最小单位。每一个进程中至少有一个线程,同一进程的所有线程共享该进程的所有资源,多个线程可以完成多个不同的任务,也就是我们常说的并发多线程。 阅读全文
posted @ 2022-11-02 14:28 一灯架构 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 深度剖析Java的volatile实现原理,再也不怕面试官问了 上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁。为什么volatile是轻量级锁,体现在哪些方面?以及volatile的作用和实现原理是怎样的?本篇带你一块学习一下。 阅读全文
posted @ 2022-10-31 10:13 一灯架构 阅读(314) 评论(0) 推荐(1) 编辑