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

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

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

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

Lock锁 精讲

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

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

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

聊聊并发,进程通信方式,go协程简单应用场景

知道并发,并行,线程,协程概念吗?或者知道大概含义吗? 有线程为什么还要有协程?区别是什么? 『进程』通信方式知道几种?有没有超过3种? golang『协程』通信方式推荐? 使用并发的目的是为什么?是能帮我们解决什么问题吗? ... »

volatile 关键字精讲

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

并发与并行

并发与并行 学习并发编程之初好像就一直对这个问题含混不清,在阅读《Java8实战》以及网络资源的时候对这个问题有了更进一步的认识,特此梳理一下 什么是并发、并行? 这里引用Java8实战中的一张图片来加以说明 可能从上图简单来看,并发是单处理器核心多任务的交替执行,并行是多任务多处理器核心的同时执行 ... »

RocketMQ(七):高性能探秘之MappedFile

RocketMQ作为消息中间件,经常会被用来和其他消息中间件做比较,比对rabbitmq, kafka... 但个人觉得它一直对标的,都是kafka。因为它们面对的场景往往都是超高并发,超高性能要求的场景。 所以,有必要深挖下其实现高性能,高并发的原因。实际上,这是非常大的话题,我这里也不打算一口吃 ... »

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

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

JAVA内存模型和Happens-Before规则

前言 上一篇文章王子给大家介绍了并发编程中比较关心的三个核心问题,可见性、有序性和原子性。 今天我们继续来探索并发编程的内容,聊一聊JAVA的内存模型和Happens-Before规则。 JAVA内存模型 这里的JAVA内存模型指的不是我们JVM专栏中提到的内存分布模型,而是针对并发编程的,小伙伴们 ... »

你还不懂可见性、有序性和原子性?

前言 今天开始,王子准备开始一个新的专栏:并发编程专栏。 并发编程无论在哪门语言里,都属于高级篇,面试中也尝尝会被问到。想要深入理解并发编程机制确实不是一件容易的事,因为它涉及到计算机底层和操作系统的相关知识,如果对这部分知识不是很清楚可能会导致理解困难。 在这个专栏里,王子会尽量以白话和图片的方式 ... »

AQS源码深入分析之条件队列-你知道Java中的阻塞队列是如何实现的吗?

本文基于JDK-8u261源码分析 1 简介 因为CLH队列中的线程,什么线程获取到锁,什么线程进入队列排队,什么线程释放锁,这些都是不受我们控制的。所以条件队列的出现为我们提供了主动式地、只有满足指定的条件后才能线程阻塞和唤醒的方式。对于条件队列首先需要说明一些概念:条件队列是AQS中除了CLH队 ... »

线程池的五种状态及创建线程池的几种方式

 上篇《Java线程的6种状态详解及创建线程的4种方式》 前言:我们都知道,线程是稀有资源,系统频繁创建会很大程度上影响服务器的使用效率,如果不加以限制,很容易就会把服务器资源耗尽。所以,我们可以通过创建线程池来管理这些线程,提升对线程的使用率。 1、什么是线程池? 简而言之,线程池就是管理线程的 ... »

webmagic源码浅析

webmagic简介 webmagic可以说是中国传播度最广的Java爬虫框架,https://github.com/code4craft/webmagic,阅读相关源码,获益良多。阅读作者博客【代码工匠】,能够领略到一个IT工作者的工匠精神,希望以后成为他这样的开源贡献者。Webmagic的文档也 ... »

Java内存模型 - 简介

Java内存模型的基础 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步,通信指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 Java语言的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明 ... »