架构与思维:设计容量,到底有多重要 ?

背景 单位每年都会举行运动会,有一个2000m长跑的项目,大约每年报名人员为男选手40人,女选手20人,只有一条橡胶跑道。一次比赛10人齐跑,所以至少需要6场比赛。 2000米的完成时间要求是20分钟,超过20分钟不计数,所以比赛耗时我们计算为20分钟,加上比赛前的动员组织,比赛后的清场,我们假定每 ... »

多线程与锁 + 常见面试题

多线程 1. 常见概念: 1. yield,join,notify和notifyAll yield(方法是停止当前线程,让同等优先权的线程或更高优先级的线程有执行的机会。如果没有的话,那么yield方法将不会起作用,并且由可执行状态后马上又被执行。 join方法是用于在某一个线程的执行过程中调用另一 ... »

Synchronized 轻量级锁会自旋?好像并不是这样的。

本来是在写面霸系列的,写着写着就写到了这一题: Synchronized 原理知道不? 而关于 Synchronized 我去年还专门翻阅 JVM HotSpot 1.8 的源码来研究了一波,那时候我就发现有一个点,一个几乎网上所有文章包括《Java并发编程的艺术》也是这样说的一个点。 锁升级想必网 ... »

synchronized详解

synchronized是Java多线程中元老级的锁,也是面试的高频考点,让我们来详细了解synchronized吧。 在Java中,synchronized锁可能是我们最早接触的锁了,在 JDK1.5之前synchronized是一个重量级锁,相对于juc包中的Lock,synchronized显 ... »

Synchronized关键字

Synchronized用法 实现原理: Monitorenter: Monitorexit: JVM中锁的优化 锁的类型 自旋锁 自适应自旋锁 锁消除 锁粗化 轻量级锁 偏向锁: 锁的优缺点对比 Synchronized和Lock 使用Synchronized有哪些要注意的? synchroniz ... »

说说Golang goroutine并发那些事儿

摘要:今天我们一起盘点一下Golang并发那些事儿。 Golang、Golang、Golang 真的够浪,今天我们一起盘点一下Golang并发那些事儿,准确来说是goroutine,关于多线程并发,咱们暂时先放一放(主要是俺现在还不太会,不敢出来瞎搞)。关于golang优点如何,咱们也不扯那些虚的。 ... »

思维导图整理Java并发基础

话不多说,先上图。 1、基本概念 欲说线程,必先说进程。 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。 操作系统在分配资源时是把资源分配给进程的, 但是 CPU 资源比较特 ... »

并发队列:ArrayBlockingQueue实际运用场景和原理

ArrayBlockingQueue实际应用场景 之前在某公司做过一款情绪识别的系统,这套系统通过调用摄像头接口采集人脸信息,将采集的人脸信息做人脸识别和情绪分析,最终经过一定的算法将个人情绪数据转化具体行为指标值。其中采集图片的部分就用到了并发队列ArrayBlockingQueue。 如上图所示 ... »

并发条件队列之Condition 精讲

1. 条件队列的意义 Condition将Object监控器方法( wait , notify和notifyAll )分解为不同的对象,从而通过与任意Lock实现结合使用,从而使每个对象具有多个等待集。 Lock替换了synchronized方法和语句的使用,而Condition替换了Object监 ... »

在nodejs中创建child process

在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建新的线程来执行自己的任务。 本文将会介绍一种新 ... »

AQS之ReentrantReadWriteLock写锁

用法 1.1 定义一个安全的list集合 public class LockDemo { ArrayList<Integer> arrayList = new ArrayList<>();//定义一个集合 // 定义读锁 ReentrantReadWriteLock.ReadLock readLoc ... »

nodejs中使用worker_threads来创建新的线程

nodejs中使用worker_threads来创建新的线程 简介 之前的文章中提到了,nodejs中有两种线程,一种是event loop用来相应用户的请求和处理各种callback。另一种就是worker pool用来处理各种耗时操作。 nodejs的官网提到了一个能够使用nodejs本地wok ... »

Java并发编程实战(5)- 线程生命周期

在这篇文章中,我们来聊一下线程的生命周期。 概述 线程是操作系统中的一个概念,在Java中,它是实现并发程序的主要手段。 Java中的线程,本质上就是操作系统中的线程。 操作系统中的线程有“生老病死”,专业说法就是生命周期,虽然不同的开发语言对于操作系统的线程做了不同的封装,但是对于线程生命周期来说 ... »

一文带你学会AQS和并发工具类的关系

1. 存在的意义 AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。 提供一个框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器 ... »

Lock锁 精讲

1.为什么需要Lock 为什么synchronized不够用,还需要Lock Lock和synchronized这两个最常见的锁都可以达到线程安全的目的,但是功能上有很大不同。 Lock并不是用来代替synchronized的而是当使用synchronized不满足情况或者不合适的时候来提供高级功能 ... »

Java并发编程实战(4)- 死锁

在这篇文章中,我们主要讨论一下死锁及其解决办法。 概述 在上一篇文章中,我们讨论了如何使用一个互斥锁去保护多个资源,以银行账户转账为例,当时给出的解决方法是基于Class对象创建互斥锁。 这样虽然解决了同步的问题,但是能在现实中使用吗?答案是不可以,尤其是在高并发的情况下,原因是我们使用的互斥锁的范 ... »