Java并发/多线程-CAS原理分析

什么是CAS CAS 即 compare and swap,比较并交换。 CAS是一种原子操作,同时 CAS 使用乐观锁机制。 J.U.C中的很多功能都是建立在 CAS 之上,各种原子类,其底层都用 CAS来实现原子操作。用来解决并发时的安全问题。 并发安全问题 举一个典型的例子i++ public ... »

Java高并发与多线程(二)-----线程的实现方式

今天,我们开始Java高并发与多线程的第二篇,线程的实现方式。 通常来讲,线程有三种基础实现方式,一种是继承Thread类,一种是实现Runnable接口,还有一种是实现Callable接口,当然,如果我们铺开,扩展一下,会有很多种实现方式,但是归根溯源,其实都是这几种实现方式的衍生和变种。 我们依 ... »

Java多线程-线程池的使用

线程池的优点 线程频繁的创建=>销毁=>创建对系统对开销很大,使用线程池可以避免重复的开销 方便复用,提高相应速度 线程的创建于执行完全分开,方便维护,降低耦合 线程池的实现原理 池化技术 一说到线程池自然就会想到池化技术。 其实所谓池化技术,就是把一些能够复用的东西放到池中,避免重复创建、销毁的开 ... »

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

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

Java多线程-锁的区别与使用

锁类型 可中断锁 在等待获取锁过程中可中断 Lock就是可中断锁 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。 对于ReentrantLock ... »

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

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

Java高并发与多线程(一)-----概念

其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直没写。 但是想了想既然之前有这个想法,而且也已经好久没有写过博客了,索性还是写一写,尽量写的有意思一 ... »

Lock锁 精讲

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

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

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

volatile 关键字精讲

1.错误案例 通过一个案例引出volatile关键字,例如以下代码示例 : 此时没有加volatile关键字两个线程间的通讯就会有问题 public class ThreadsShare { private static boolean runFlag = false; // 此处没有加 volat ... »

备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求我整理一些java岗的面试题,年前一直没时间,这次趁着元旦节给大家整理了一些一线互联网公司java岗 ... »

RocketMQ(七):高性能探秘之线程池

上一篇文章讲了如何设计和实现高并发高性能的应用,从根本上说明了一些道理。且以rocketmq的mappedFile的实现作为一个突破点,讲解了rocketmq是如何具体实现高性能的。从中我们也知道,mappedFile只是其利用的操作系统的一个特性小点。 今天,我们就来说说,rockmq实现高性能的 ... »

Java 细粒度锁续篇

在上篇文章中大概介绍了 Java 中细粒度锁的几种实现方式,并且针对每种方式都做了优缺点说明,在使用的时候就需要根据业务需求选择更合适的一种。上篇文章中的最后一种弱引用锁的实现方式,我在里面也说了其实还有更优雅的实现,其实也算不上更优雅,只是看起来更优雅,原理还是一样的,今天我打算用一篇文章的篇幅来 ... »

NO.001- 简说 Java 并发编程史

这篇文章是Java并发编程思想系列的第一篇,主要从理解Java并发编程历史的原因和Java并发演进过程两部分,以极简地回溯并发编程的历史,帮助大家从历史这个角度去了解一门语言一个特性的演进。对历史理解的越多,思考的越多,未来的方向就会更加坚定。 ... »

线程虚假唤醒问题剖析

好久没写博客,最近在学习过程中遇到一个拦路虎:多线程通信中的虚假唤醒导致数据不一致的问题,看了很多资料,也去一些博主文章下请教,发现大家的解释都没理解到点子上,都是在最关键的地方囫囵吞枣地一句带过,这让人很沮丧,遂写此文,自我记录,有需沟通可留言。 1、什么是虚假唤醒? 虚假唤醒就是在多线程执行过程 ... »

Reactor中的Thread和Scheduler

简介 今天我们要介绍的是Reactor中的多线程模型和定时器模型,Reactor之前我们已经介绍过了,它实际上是观察者模式的延伸。 所以从本质上来说,Reactor是和多线程无关的。你可以把它用在多线程或者不用在多线程。 今天将会给大家介绍一下如何在Reactor中使用多线程和定时器模型。 Thre ... »

Java线程池原理及分析

线程池是很常用的并发框架,几乎所有需要异步和并发处理任务的程序都可用到线程池。 使用线程池的好处如下: 降低资源消耗:可重复利用已创建的线程池,降低创建和销毁带来的消耗; 提高响应速度:任务到达时,可立即执行,无需等待线程创建; 提高线程的可管理性:线程池可对线程统一分配、调优和监控。 原理 线程池 ... »

并发编程之美(基础篇)- 笔记

阅读 《Java并发编程之美》 - 翟陆续 (作者) 的笔记 第一章 并发编程线程基础 什么是线程 进程和线程的关系: 线程是进程中的一个实体,线程本身是不会独立存在的 进程是系统资源分配和调度的基本单位 一个进程中至少有一个线程,进程中的多个线程共享进程的资源 CPU资源比较特殊,是分配到线程的 ... »