随笔分类 - java多线程
摘要:首先,我们来看一个应用场景1: 假设一条流水线上有三个工作者:worker0,worker1,worker2。有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作,而worker0和worker1是可以并行他们各自的工作的。 如果
阅读全文
摘要:如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。| 掘金技术征文 - 掘金 (juejin.cn) 如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。| 掘金技术征文 - 掘金 (juejin.cn)
阅读全文
摘要:生产者消费者模型是我们学习多线程知识的一个经典案例,一个典型的生产者消费者模型如下: public void produce() { synchronized (this) { while (mBuf.isFull()) { try { wait(); } catch (InterruptedExc
阅读全文
摘要:把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。 原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。可见性则更为微
阅读全文
摘要:ReentrantLock和Synchronized的区别 其实ReentrantLock和Synchronized最核心的区别就在于Synchronized适合于并发竞争低的情况,因为Synchronized的锁升级如果最终升级为重量级锁在使用的过程中是没有办法消除的,意味着每次都要和cpu去请求
阅读全文
摘要:提高java的并发编程,就不得不提volatile关键字,不管是在面试还是实际开发中 volatile都是一个应该掌握的技能。他的重要性不言而喻。因此也有必要学好。 一、为什么要用到volatile关键字? 使用一个新技术的原因肯定是当前存在了很多问题,在Java多线程的开发中有三种特性:原子性、可
阅读全文
摘要:sleep和wait的区别是面试中一个非常常见的问题,因为从表象来看,好像sleep和wait都能使线程处于阻塞状态,但是却有着本质上的却别。这篇文章就来好好分析一下。 整体的区别其实是有四个: 1、sleep是线程中的方法,但是wait是Object中的方法。 2、sleep方法不会释放lock,
阅读全文
摘要:java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。这篇文章主要是从使用的角度来分析一下ReentrantLock。 一、简介 R
阅读全文
摘要:一、synchronized简介 synchronized 是Java语言的一个关键字,它本身的意思为同步,是用来保证线程安全的,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。 synchronized一句话来解释其作用就是:能够保证同
阅读全文
摘要:所谓线程的“工作内存”到底是个什么东西?有的人认为是线程的栈,其实这种理解是不正确的。看看JLS(java语言规范)对线程工作 内存的描述,线程的working memory只是cpu的寄存器和高速缓存的抽象描述。 可能 很多人都觉得莫名其妙,说JVM的内存模型,怎么会扯到cpu上去呢?在此,我认为
阅读全文
摘要:在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线
阅读全文