随笔分类 -  王者并发课

基于王者中的段位和场景,从青铜、黄金、铂金、砖石、星耀到王者,不同的段位对应不同的难易程度,由浅入深逐步介绍JAVA中的并发编程,并在每周二、四、六持续更新。
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第20篇。 在上一篇文章中,我们介绍了Condition的用法。在本文中,将为你介绍CountDownLatch的用法。CountDownLatch是JUC中的一款常用工具类,当你在编写多线程代码时,如果你需要协调多个线程的开始和结束动作时,它可能会是你的 阅读全文
posted @ 2021-07-02 10:56 秦二爷 阅读(293) 评论(2) 推荐(1)
摘要:在上一篇文章中,我们介绍了阻塞队列。如果你阅读过它的源码,那么你一定会注意到源码有两个Condition类型的变量:`notEmpty`和`notFull`,在读写队列时你也会注意到它们是如何被使用的。事实上,在使用JUC中的各种锁时,Condition都很有用场,你很有必要了解它。所以,本文就为你介绍它的来龙去脉和用法。 阅读全文
posted @ 2021-07-01 10:33 秦二爷 阅读(209) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第18篇。 在线程的同步中,阻塞队列是一个绕不过去的话题,它是同步器底层的关键。所以,我们在本文中将为你介绍阻塞队列的基本原理,以了解它的工作机制和它在Java中的实现。本文稍微有点长,建议先了解大纲再细看章节。 阅读全文
posted @ 2021-06-28 10:18 秦二爷 阅读(241) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第17篇。 在并发编程中,信号量是线程同步的重要工具。在本文中,我将带你认识信号量的概念、用法、种类以及Java中的信号量。 信号量(Semaphore) 是线程间的同步结构,主要用于多线程协作时的信号传递,以及对共享资源的保护、防止竞态的发生等。信号量这一概念听起来比较抽象,然而读完本文你会发现它竟然也是如此通俗易懂且挺有用。 阅读全文
posted @ 2021-06-22 10:17 秦二爷 阅读(260) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第16篇。 在前面的文章中,我们提到了锁的可重入问题,并作了简单介绍。鉴于锁的可重入是一个重要概念,所以本文把拿出来做一次单独讲解,以帮助你彻底理解它。 阅读全文
posted @ 2021-06-21 10:18 秦二爷 阅读(364) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第15篇。 在上篇文章中,我们介绍了Java中锁的基础Lock接口。在本文中,我们将介绍Java中锁的另外一个重要的基本型接口,即ReadWriteLock接口。 在探索Java中的并发时,ReadWriteLock无疑是重要的,然而理解它却并不容易。如果你此前曾经检索资料,应该会发现大部分的文章对它的描述都比较晦涩难懂,或连篇累牍的源码陈列,或隔靴搔痒的三言两语,既说不到重点,也说不清来龙去脉。 阅读全文
posted @ 2021-06-18 09:58 秦二爷 阅读(243) 评论(0) 推荐(0)
摘要:在黄金系列中,我们介绍了并发中一些问题,比如死锁、活锁、线程饥饿等问题。在并发编程中,这些问题无疑都是需要解决的。所以,在铂金系列文章中,我们会从并发中的问题出发,探索Java所提供的锁的能力以及它们是如何解决这些问题的。 作为铂金系列文章的第一篇,我们将从Lock接口开始介绍,因为它是Java中锁的基础,也是并发能力的基础。 阅读全文
posted @ 2021-06-16 10:10 秦二爷 阅读(282) 评论(2) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第13篇。 在上篇文章中,我们介绍了避免死锁的几种策略。虽然死锁臭名昭著,然而在并发编程中,除了死锁之外,还有一些同样重要的线程活跃性问题值得关注。它们的知名度不高,但破坏性极强,本文将介绍的正是其中的线程饥饿和活锁问题。 阅读全文
posted @ 2021-06-13 09:33 秦二爷 阅读(278) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第12篇。 在上篇文章中,我们介绍了死锁的概念及其原因,本文将为你介绍的是几种常见的死锁预防策略。 阅读全文
posted @ 2021-06-12 10:02 秦二爷 阅读(212) 评论(1) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第11篇。 在本篇文章中,我将为你介绍多线程中的经典问题-死锁,以及死锁的产生原因、处理和方式预防措施。 阅读全文
posted @ 2021-06-10 21:36 秦二爷 阅读(225) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第10篇。 在本篇文章中,我将为你介绍并发中的经典问题-生产者与消费者问题,并基于前面系列文章的知识点,通过wait、notify实现这一问题的简版方案。 阅读全文
posted @ 2021-06-10 12:23 秦二爷 阅读(460) 评论(0) 推荐(0)
摘要:欢迎来到《并发王者课》,本文是该系列文章中的第9篇。 在本篇文章中,我将为你介绍线程中异常的处理方式以及uncaughtExceptionHandler用法。 阅读全文
posted @ 2021-06-09 19:29 秦二爷 阅读(275) 评论(0) 推荐(1)
摘要:欢迎来到《王者并发课》,本文是该系列文章中的第8篇。 在本篇文章中,我将从多线程的本质出发,为你介绍线程相关的状态和它们的变迁方式,并帮助你掌握这块知识点。 阅读全文
posted @ 2021-05-31 12:39 秦二爷 阅读(292) 评论(0) 推荐(0)
摘要:在前面的文章中,我们已经体验过synchronized的用法,并对锁的概念和原理做了简单的介绍。然而,你可能已经察觉到,有一个概念似乎总是和synchronized、锁这两个概念如影相随,很多人也比较喜欢问它们之间的区别,这个概念就是Monitor,也叫监视器。 阅读全文
posted @ 2021-05-28 10:29 秦二爷 阅读(408) 评论(0) 推荐(0)
摘要:在前面的文章《一探究竟-如何从synchronized理解Java对象头中的锁》中,我们介绍并体验了JOL工具。虽然JOL很赞,但它的输出对我们不是很友好,如果不借助工具,我们很难直观理解其中的含义。 下面这段代码是对JOL输出的翻译,建议你收藏。代码非我原创,文末已经注明出处。 import or 阅读全文
posted @ 2021-05-27 10:29 秦二爷 阅读(144) 评论(0) 推荐(0)
摘要:本文将分两个部分,首先你要从Mark Word中认识锁,因为对象锁的信息存在于Mark Word中,其次通过JOL工具实际体验Mark Word的变化。 阅读全文
posted @ 2021-05-27 10:28 秦二爷 阅读(307) 评论(0) 推荐(1)
摘要:在前面的文章《双刃剑-理解多线程带来的安全问题》中,我们提到了多线程情况下存在的线程安全问题。本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题。 阅读全文
posted @ 2021-05-25 18:19 秦二爷 阅读(397) 评论(2) 推荐(2)
摘要:在前面的两篇文章中,我们体验了线程的创建,并从OS进程层面认识了线程。现在,我们已经知晓多线程在解决一些场景问题时有特效。 然而,不知你可曾想过,多线程虽然效率很高,但是它却有着你无法回避的并发问题。举个王者中常见的场景,双方10人同时进攻主宰,最后击败主宰的玩家才是真正的赢家,而且只能有一位。所以 阅读全文
posted @ 2021-05-24 17:30 秦二爷 阅读(145) 评论(0) 推荐(0)
摘要:在前面的《兵分三路:如何创建多线程》文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感。在本篇文章中,我们将基于前面的示例代码,对线程做些必要的说明,以帮助你从更基础的层面认知线程,并为后续的学习打下基础。 一、从进程认知线程 在上世纪 阅读全文
posted @ 2021-05-20 18:11 秦二爷 阅读(143) 评论(0) 推荐(0)
摘要:从本文开始,我将基于王者中的段位和场景,从青铜、黄金、铂金、砖石、星耀到王者,不同的段位对应不同的难易程度,由浅入深逐步介绍JAVA中的并发编程,并在每周二、四、六持续更新。 在文章的知识体系方面,主要以实践为主,并在实践中穿插理论知识的讲解,而本文将从最简单的线程创建开始。 一、一个游戏场景 在本 阅读全文
posted @ 2021-05-19 10:49 秦二爷 阅读(176) 评论(0) 推荐(1)