并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础

2021-06-16
阅读 5 分钟
902
在黄金系列中,我们介绍了并发中一些问题,比如死锁、活锁、线程饥饿等问题。在并发编程中,这些问题无疑都是需要解决的。所以,在铂金系列文章中,我们会从并发中的问题出发,探索Java所提供的锁的能力以及它们是如何解决这些问题的。

并发王者课-黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

2021-06-13
阅读 3 分钟
1.3k
在上篇文章中,我们介绍了避免死锁的几种策略。虽然死锁臭名昭著,然而在并发编程中,除了死锁之外,还有一些同样重要的线程活跃性问题值得关注。它们的知名度不高,但破坏性极强,本文将介绍的正是其中的线程饥饿和活锁问题。

并发王者课-黄金2:行稳致远-如何让你的线程免于死锁

2021-06-12
阅读 4 分钟
1k
欢迎来到《并发王者课》,本文是该系列文章中的第12篇。在上篇文章中,我们介绍了死锁的概念及其原因,本文将为你介绍的是几种常见的死锁预防策略。简单来说,预防死锁主要有三种策略:顺序化加锁;给锁一个超时期限;检测死锁。一、顺序化加锁通常,死锁的产生是由于多个线程无序请求资源造成的。资源是有限的,不可能...

并发王者课-黄金1:两败俱伤-互不相让的线程如何导致了死锁僵局

2021-06-10
阅读 3 分钟
863
欢迎来到《并发王者课》,本文是该系列文章中的第11篇。在本篇文章中,我将为你介绍多线程中的经典问题-死锁,以及死锁的产生原因、处理和方式预防措施。一、死锁的产生观察下面这幅图,线程1持有了A,但它需要B;而线程2持有了B,但是它需要A。你看,问题就来了,A、B都在等待对方已经持有的资源,并且都不释放,这就让...
封面图

并发王者课-青铜10:千锤百炼-如何解决生产者与消费者经典问题

2021-06-10
阅读 3 分钟
1.2k
在本篇文章中,我将为你介绍并发中的经典问题-生产者与消费者问题,并基于前面系列文章的知识点,通过wait、notify实现这一问题的简版方案。

并发王者课-青铜9:防患未然-如何处理线程中的异常

2021-06-09
阅读 4 分钟
873
应用程序在执行过程中,难免会出现各种意外错误,如果我们没有对错误进行捕获处理,会直接影响应用的运行结果,甚至导致应用崩溃。而在应用异常处理中,多线程的异常处理是比较重要又容易犯错的地方。
封面图

并发王者课-青铜8:分工协作-从本质认知线程的状态和动作方法

2021-05-31
阅读 6 分钟
874
如果你是王者的玩家,那么你一定知道王者中的众多英雄分为主要分为几类,比如法师、战士、坦克、辅助等等。一些玩家对这些分类可能并不了解,甚至会觉得,干嘛要搞得这么复杂,干不完了嘛。这...当然不可以!

并发王者课-青铜7:顺藤摸瓜-如何从synchronized中的锁认识Monitor

2021-05-28
阅读 6 分钟
774
在前面的文章中,我们已经体验过synchronized的用法,并对锁的概念和原理做了简单的介绍。然而,你可能已经察觉到,有一个概念似乎总是和synchronized、锁这两个概念如影相随,很多人也比较喜欢问它们之间的区别,这个概念就是Monitor,也叫监视器。
封面图

并发王者课-青铜6:借花献佛-如何格式化Java内存工具JOL输出

2021-05-27
阅读 4 分钟
737
在前面的文章《一探究竟-如何从synchronized理解Java对象头中的锁》中,我们介绍并体验了JOL工具。虽然JOL很赞,但它的输出对我们不是很友好,如果不借助工具,我们很难直观理解其中的含义。

并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

2021-05-27
阅读 6 分钟
777
在前面的文章《青铜4:synchronized用法初体验》中,我们已经提到锁的概念,并指出synchronized是锁机制的一种实现。可是,这么说未免太过抽象,你可能无法直观地理解锁究竟是什么?所以,本文会粗略地介绍synchronized背后的一些基本原理,让你对Java中的锁有个粗略但直观的印象。
封面图

并发王者课-青铜4:宝刀屠龙-如何使用synchronized之初体验

2021-05-25
阅读 5 分钟
817
在前面的文章《双刃剑-理解多线程带来的安全问题》中,我们提到了多线程情况下存在的线程安全问题。本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题。当然,在青铜阶段,我们仍不会过多地描述其背后的原理,重点还是先体验并理解它的用法。

并发王者课-青铜3:兴利除弊-如何理解多线程的安全问题

2021-05-24
阅读 3 分钟
1.2k
然而,不知你可曾想过,多线程虽然效率很高,但是它却有着你无法回避的并发问题。举个王者中常见的场景,双方10人同时进攻主宰,最后击败主宰的玩家才是真正的赢家,而且只能有一位。所以问题来了,假如这10位玩家代表10个线程,它们在并发访问同一个资源时,如何保证数据的安全性?总不至于,主宰只有一条命,可是却有...
封面图

并发王者课-青铜2:本来面目-如何简单认识Java中的线程

2021-05-20
阅读 4 分钟
1.4k
在前面的《兵分三路:如何创建多线程》文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感。在本篇文章中,我们将基于前面的示例代码,对线程做些必要的说明,以帮助你从更基础的层面认知线程,并为后续的学习打下基础。
封面图

并发王者课-青铜1:牛刀小试-如何创建线程之初体验

2021-05-18
阅读 3 分钟
1.1k
从本文开始,我将基于王者中的段位和场景,从青铜、黄金、铂金、砖石、星耀到王者,不同的段位对应不同的难易程度,由浅入深逐步介绍JAVA中的并发编程,并在每周二、四、六持续更新。
封面图