
JUC
文章平均质量分 91
丁川
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
公平锁和非公平锁,为什么要“非公平”?
首先,我们来看下什么是公平锁和非公平锁,公平锁指的是按照线程请求的顺序,来分配锁;而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队。但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而是仅仅“在合适的时机”插队。那么什么时候是合适的时机呢?假设当前线程在请求获取锁的时候,恰巧前一个持有锁的线程释放了这把锁,那么当前申请锁的线程就可以不顾已经等待的线程而选择立刻插队。但是如果当前线程请求的时候,前一个线程并没有在那一时刻释放锁,那么当前线程还是一样会进入等待队列。原创 2024-03-25 22:56:55 · 866 阅读 · 0 评论 -
线程池实现“线程复用”的原理
学习线程复用的原理,以及对线程池的 execute 这个非常重要的方法进行源码解析。原创 2024-03-21 22:17:53 · 1511 阅读 · 0 评论 -
为什么使用多线程可能会带来性能问题
多线程会带来的线程安全问题,但对于多线程而言,它不仅可能会带来线程安全问题,还有可能会带来性能问题,也许你会奇怪,我们使用多线程的最大目的不就是为了提高性能吗?让多个线程同时工作,加快程序运行速度,为什么反而会带来性能问题呢?这是因为单线程程序是独立工作的,不需要与其他线程进行交互,但多线程之间则需要调度以及合作,调度与合作就会带来性能开销从而产生性能问题。首先,我们来了解究竟什么是性能问题?其实性能问题有许多的表现形式,比如服务器的响应慢、吞吐量低、内存占用过多就属于性能问题。原创 2024-03-21 21:15:52 · 846 阅读 · 0 评论 -
那些场景需要额外注意线程安全问题
主要学习那些场景需要额外注意线程安全问题,在这里总结了四中场景。原创 2024-03-21 21:14:47 · 513 阅读 · 0 评论 -
生产者消费者模式
而此时,如果生产者生产了一个数据,便会唤醒两个消费者线程,而两个线程中只有一个线程可以拿到锁,并执行 queue.remove 操作,另外一个线程因为没有拿到锁而卡在被唤醒的地方,而第一个线程执行完操作后会在 finally 中通过 unlock 解锁,而此时第二个线程便可以拿到被第一个线程释放的锁,继续执行操作,也会去调用 queue.remove 操作,然而这个时候队列已经为空了,所以会抛出。生产者负责生产数据,消费者负责处理数据,通过合理的协作,可以实现高效的数据处理。如何才能让大家更好地配合呢?原创 2024-03-20 20:57:29 · 1199 阅读 · 0 评论 -
浅谈ForkJoinPool:入门、使用、原理
本文将从一个简单的例子出发,与大家解释为啥要有 ForkJoinPool 的存在。原创 2024-03-10 19:56:23 · 1451 阅读 · 0 评论 -
Java面试--谈谈你对Volatile关键字的理解
Java面试–谈谈你对Volatile关键字的理解原创 2022-02-16 20:39:22 · 881 阅读 · 0 评论 -
线程之间是如何通信
线程之间是如何通信、以及为什么要通信和哪些通信方式。原创 2022-02-17 14:35:00 · 1895 阅读 · 0 评论 -
synchronized和Lock的区别
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。synchronizedSynchronized 是Java 并发编程中很重要的关键字,另外一个很重要的是 volatile。Syncronized 的目的是一次只允许一个线程进入由他修饰的代码段,从而允许他们进行自我保护。Synchronized 很像生活中的锁例子,进入由Synch...原创 2022-03-07 17:47:00 · 476 阅读 · 0 评论 -
JUC笔记(三)多线程的核心
在前面,我们了解了多线程的底层运作机制,我们终于知道,原来多线程环境下存在着如此之多的问题。在JDK5之前,我们只能选择关键字来实现锁,而JDK5之后,由于关键字得到了升级(具体功能就是上一章所描述的),所以并发框架包便出现了,相比传统的关键字,我们对于锁的实现,有了更多的选择。那么,从这章开始,就让我们来感受一下,JUC为我们带来了什么。LockSupport的用法及原理 - 简书 (jianshu.com)在JDK 5之后,并发包中新增了接口(以及相关实现类)用来实现锁功能,接口提供了与关键字类似的同步原创 2022-09-01 22:29:32 · 194 阅读 · 0 评论 -
怎么去创建多线程
线程是什么?线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位。每个程序程序都至少有一个线程,也即是程序本身。线程的状态Java语言定义了5种线程状态,在任意一个时间点,一个线程只能有且只有其中一个状态。这5种状态如下:新建(New):创建后尚未启动的线程处于这种状态运行(Runable):Runable包括了操作系统线程状态的Runni...原创 2022-03-07 20:16:00 · 212 阅读 · 0 评论 -
JUC笔记(四)并发编程进阶
并发编程进阶再谈线程池线程池怎么去创建多线程 - BeaBrick0 - 博客园 (cnblogs.com)在我们的程序中,多多少少都会用到多线程技术,而我们以往都是使用Thread类来创建一个新的线程:public static void main(String[] args) { Thread t = new Thread(() -> System.out.prin...原创 2022-03-21 21:08:00 · 331 阅读 · 0 评论 -
JUC笔记(二)ThreadLocal
ThreadLocalThreadLocal是什么感谢:(1 封私信) Java中ThreadLocal的实际用途是啥? - 知乎 (zhihu.com)ThreadLocal使用与原理_敖 丙的博客-优快云博客_threadlocal使用ThreadLocal的介绍+经典应用场景 - 掘金 (juejin.cn)十分推荐阅读,思路清晰。ThreadLocal 的作用是提供线程内的...原创 2022-03-19 16:38:00 · 364 阅读 · 0 评论 -
JUC笔记(一)多线程的认识
JUC是java.uitl.concurrent包下的一系列的的并发编程的包。线程和进程线程在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是CPU调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时需要用到的系统资源,例如程序计数器,寄存器和Java虚拟机栈等。一个进程中的所有线程可以共享进程中的所有资源。线程与进程相似,但线程是一个比进程更小的...原创 2022-03-18 13:26:00 · 854 阅读 · 0 评论