
Java并发编程
文章平均质量分 77
并发编程
Nicky.Ma
优秀
展开
-
并发编程系列之CompletableFuture实践
CompletableFuture是jdk8之后开始提供的,支持异步的工具类,上手容易,功能相对比较强大。支持函数式编程的方式对各类操作进行组合编排,是进行代码异步处理的一个很好的工具类。原创 2024-02-06 18:45:00 · 1731 阅读 · 0 评论 -
并发编程系列之ThreadLocal实现原理
并发编程系列之ThreadLocal实现原理。ThreadLocal是一个线程的本地变量,可以理解为线程的变量,在线程执行过程随时可以访问。ThreadLocal变量,只有当前线程才能访问,其它线程不能访问,所以本质上ThreadLocal就是线程安全的。所以ThreadLocal的作用和上面例子说的局部变量一样是线程安全的。原创 2022-04-16 20:29:36 · 1381 阅读 · 0 评论 -
并发编程系列之Synchronized实现原理
并发编程系列之Synchronized实现原理。偏向锁:当一个线程获取到锁后,这把锁就是偏向锁,偏向锁是在锁对象的对象头中记录一个线程id,然后该线程再次获取锁时,直接获取就可以轻量级锁:如果有第二个线程来竞争锁,这时就会升级为轻量级锁,轻量级锁是不会阻塞线程的,其底层是通过自旋实现的。自旋是通过CAS获取一个预期的标识,如果没获取到,就会一直循环获取,获取到标识,也就标识获取到锁重量级锁:如果轻量级锁一直自旋也获取不到锁,才会升级为重量级锁,重量锁是会阻塞线程的,也称之为重锁原创 2022-04-10 12:30:56 · 1177 阅读 · 2 评论 -
并发编程系列之AQS实现原理
并发编程系列之AQS实现原理。AQS(AbstractQueuedSynchronizer),抽象队列同步器,是juc中很多Lock锁和同步组件的基础,比如CountDownLatch、ReentrantLock、ReentrantReadWriteLock、Semaphore等等,提供了对资源的占用、释放,线程的等待、唤醒等等接口或具体实现,可以用在各种需要控制资源竞争的场景中。原创 2022-01-11 18:14:39 · 1608 阅读 · 2 评论 -
并发编程系列之自定义可以命名的线程池工厂类
在使用多线程时候,有时候需要记录具体是哪些业务执行的,不过按照默认的情况,是会打印pool-1-thread-1这种类型的数据,所以有时候不能确定具体哪些业务线程执行的,可以先写一个线程池sample类,运行看看情况原创 2021-12-13 19:48:39 · 1538 阅读 · 0 评论 -
基于Zookeeper实现分布式锁实践
基于Zookeeper实现分布式锁实践。Zookeeper是一个分布式的,开源的分布式应用程序协调服务,是Hadoop和hbase的重要组件。zookeeper的数据机构是一种节点树的数据结构,zNode是基本的单位,znode是一种和unix文件系统相似的节点,可以往这个节点存储或向这个节点获取数据原创 2021-12-10 13:06:33 · 2651 阅读 · 0 评论 -
并发编程系列之分布式锁原理和实现方式
并发编程系列之分布式锁原理和实现方式。在单体系统,虽然也有多线程并发的情况,但是都是在同一个进程里的,所以可以juc提供的各种锁就可以实现线程安全。但是在分布式环境,是要控制不同进程中的线程并发执行抢资源,这种情况juc的工具api是做不到的,所以需要一个独立的分布式锁生成器,从而保证多个进程中的线程使用同一把锁原创 2021-12-05 17:24:40 · 1479 阅读 · 0 评论 -
并发编程系列之掌握原子类使用
并发编程系列之掌握原子类使用。原子类是jdk的juc包中提供的对单个变量进行无锁、线程安全修改的工具类。juc中提供的锁,能很好地保证线程安全,但是在高并发的情况下,可能不能保证高性能,所以适当地使用原子类,有时候是可以提高性能原创 2021-12-04 20:14:49 · 3367 阅读 · 0 评论 -
并发编程系列之StampedLock使用
StampedLock,也即邮戳锁,是jdk8中推出的对读写锁的缺点进行改进的邮戳锁,它推出了乐观读写来改进大量并发读,少量写的情况的性能原创 2021-12-03 17:41:11 · 1748 阅读 · 0 评论 -
并发编程系列之ReadWriteLock使用
并发编程系列之ReadWriteLock使用。ReadWriteLock是jdk的juc包中提供的读写锁api,维护一对关联的读锁、写锁,读锁可以被多个读线程共享,写锁排他。ReadWriteLock根据一系列规则保证了线程安全也保证了执行效率原创 2021-12-03 10:11:22 · 1565 阅读 · 0 评论 -
并发编程系列之掌握Condition接口使用
并发编程系列之掌握Condition接口使用。Condition是jdk的juc包中提供的并发等待api,俗称条件等待,条件变量,用于在Lock中提供synchronized加Object的wait/notify等待通知模式原创 2021-12-02 15:44:22 · 1657 阅读 · 0 评论 -
并发编程系列之ReentrantLock用法简介
并发编程系列之ReentrantLock用法简介。ReentrantLock是实现底层的Lock接口的可重入锁实现。支持公平锁模式和非公平锁模式原创 2021-12-01 19:06:40 · 1576 阅读 · 0 评论 -
并发编程系列之Semaphore用法简介
就是要给令牌池,可获取信号量(令牌或者许可)、放入信号量。常用于控制并发的线程数,也可用于池类资源的访问控制。原创 2021-11-29 16:55:47 · 1482 阅读 · 0 评论 -
并发编程系列之Phaser用法简介
对Phaser阶段协同器的理解,Phaser适用于多个线程协作的任务,分为多个阶段,每个阶段都可以有任意个参与者,线程可以随时注册并参与某个阶段;当一个阶段中所有任务都成功完成后,Phaser的onAdvance()被调用,然后Phaser释放等待线程,自动进入下个阶段。如此循环,直到Phaser不再包含任何参与者。原创 2021-11-29 16:52:11 · 1560 阅读 · 0 评论 -
并发编程系列之CyclicBarrier用法简介
CyclicBarrier,协同指定数目的线程,让这些线程都在这个屏障前等待,直到所有的线程都到这个屏障前,再一起继续执行。线程执行完成后,这个屏障可以再次使用,因此被称之为循环屏障。原创 2021-11-29 16:16:10 · 1535 阅读 · 0 评论 -
并发编程系列之CountDownLatch用法简介
并发编程系列之CountDownLatch用法简介。CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行原创 2021-11-29 16:13:30 · 1922 阅读 · 0 评论 -
并发编程系列之什么是并发协同?
并发编程系列之什么是并发协同?多个线程并发,协作来完成一件任务的过程。因为任务处理的需要,需控制某些线程等待另外一些线程执行完成任务的某些部分,然后继续执行原创 2021-11-29 16:57:06 · 1834 阅读 · 2 评论 -
单例模式双重检查锁模式为什么必须加 volatile?
单例模式双重检查锁模式为什么必须加 volatile?在new Singleton时候,会进行如下的过程,①先给Singleton分配内存空间、②调用Singleton的构造函数进行初始化操作③将Singleton对象指向分配的内存空间。不加volatile关键字,进行代码编译时候是会进行指令重排序的原创 2021-11-22 20:02:47 · 1738 阅读 · 0 评论 -
并发编程系列之volatile关键字详解
volatile是什么?volatile是Java中的一个关键字,也是一种同步机制。volatile为了保证变量的可见性,通过volatile修饰的变量具有共享性。修改了volatile修饰的变量,其它线程是可以读取到最新的值的原创 2021-11-27 17:43:46 · 2297 阅读 · 0 评论 -
并发编程系列之什么是Java内存模型?
并发编程系列之什么是Java内存模型?Java内存模型简称JMM(Java Memory Model),JMM是和多线程并发相关的一组规范。各个jvm实现都要遵循这个jmm规范。才能保证Java代码在不同虚拟机顺利运行。因此,JMM 与处理器、缓存、并发、编译器有关。它解决了CPU 多级缓存、处理器优化、指令重排等导致的结果不可预期的问题原创 2021-11-20 11:08:51 · 1513 阅读 · 0 评论 -
并发编程系列之变量可见性问题探究
并发编程系列之变量可见性问题探究。以例子的形式看看,定义一个变量,先用static修饰,在主线程修改之后,看看在新开的子线程里能被看到?原创 2021-11-15 16:33:06 · 1583 阅读 · 0 评论 -
并发编程系列之掌握LockSupport的用法
并发编程系列之掌握LockSupport的用法,LockSupport是用于创建锁和其他同步类的基本线程阻塞原语,LockSupport提供了两类最基本的API原创 2021-11-15 16:32:55 · 1263 阅读 · 0 评论 -
并发编程系列之什么是ForkJoin框架?
并发编程系列之什么是ForkJoin框架?ForkJoin框架是java的JUC包里提供的,用于处理一些比较繁重的任务,会将这个大任务分为多个小任务,多个小任务处理完成后会将结果汇总给Result,体现的是一种“分而治之”的思想。第一步,拆分fork任务,将大任务分为多个小任务;第二步,归并join,会将小任务的处理结果进行归并为一个结果。原创 2021-10-16 17:59:41 · 1300 阅读 · 0 评论 -
并发编程系列之FutureTask源码学习笔记
并发编程系列之FutureTask源码学习笔记,在上一章节的学习中,我们知道了Future类的基本用法,知道了Future其实就是为了监控线程任务执行的,接着本博客继续学习FutureTask。然后什么是FutureTask类?Future是1.5版本引入的异步编程的顶层抽象接口,FutureTask则是Future的基础实现类。同时FutureTask还实现了Runnable接口,所以FutureTask也可以作为一个独立的Runnable任务原创 2021-09-12 09:52:21 · 1407 阅读 · 0 评论 -
并发编程系列之Future类的主要功能介绍
并发编程系列之Future类的主要功能介绍,Future类:future类的是一种异步任务监视器,可以让提交者可以监视任务的执行,同时可以取消任务的执行,也可以获取任务返回结果原创 2021-09-01 22:34:14 · 2207 阅读 · 0 评论 -
并发编程系列之Callable和Runnable的不同?
并发编程系列之Callable和Runnable的不同?本博客学习要点:1、了解Runnable的原理和不足2、掌握怎么使用Callable实现任务3、对比Runnable和Callable的不同原创 2021-09-01 19:51:40 · 1322 阅读 · 2 评论 -
并发编程系列之如何正确使用线程池?
并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识。线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务?原创 2021-09-01 22:33:41 · 2918 阅读 · 12 评论 -
并发编程系列之线程基础知识回顾
并发编程系列之线程基础知识回顾,并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。问题1、使用多线程的目的是什么?充分利用cpu资源,可以并发的处理任务原创 2021-08-27 13:54:48 · 1542 阅读 · 4 评论 -
并发编程系列之JDK JUC实现内存缓存
利用jdk JUC, java.util.concurrent里的类实现定时缓存,缓存可以设置过期,过期可以定时清缓存。对于业务数据来说,如果缓存有数据,就直接读缓存(内存),缓存没数据才读数据库,读取之后要将数据再丢到缓存原创 2020-09-07 17:54:21 · 3105 阅读 · 1 评论 -
并发编程系列之线程join方法使用方法简介
本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的如图所示代码,是并行执行的public class ThreadTest { //private static final Long count = 10000L; public static void main(String[] args){ ...原创 2019-09-25 08:38:11 · 4301 阅读 · 4 评论 -
并发编程系列之上下文切换学习笔记
介绍上下文切换之前先介绍一下进程、线程的相关概念,以便于更好地理解上下文切换进程:在操作系统中的定义是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。在早期的操作系统中,确实是由进程直接执行程序的,所谓程序就是数据、指令及其组织形式的描述。进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度线程:早期的操作系统程序是由进程执行,现在的操作系统就...原创 2019-09-25 08:38:33 · 2541 阅读 · 0 评论 -
并发编程系列之线程并行学习笔记
一、线程并行相关概念同步(Synchronous)和异步(Asynchronous)同步和异步的本质区别是是否需要等待,比如一个方法在执行,必须等前面一个方法程执行完成,才可以执行,这就是同步。如果不需要等上一个方法执行完成,并行或者并发执行,这就是异步调用。并发(Concurrency)和并行(Parallelism)并发和并行两个概念很容易混淆。解释起来意思也差不多,不过说起来,并行才...原创 2018-12-15 23:36:54 · 3692 阅读 · 4 评论 -
为什么说创建线程的方法只有1种?
为什么说创建线程的方法只有1种??并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。创建线程的方式是学习并发编程的一个很基础的问题,所以必须先掌握好,这应该说是一个比较经典的面试题,创建线程的方式到底有多少种?有人可能会说有两种?三种?四种?原创 2021-08-22 16:16:02 · 1884 阅读 · 6 评论 -
NIO系列之工作机制简介
前言本博客只简单介绍NIO的原理实现和基本工作流程I/O和NIO的本质区别NIO将填充和提取缓冲区的I/O操作转移到了操作系统I/O 以流的方式处理数据,而 NIO 以缓冲区的方式处理数据;IO是阻塞的,NIO是非阻塞的,直到有数据被读取或者数据完全写入时,IO线程才开始执行操作,而NIO在如何情况都是非阻塞的通道(Channel)和缓冲区(Buffer)NIO三个...原创 2018-04-08 17:36:50 · 3086 阅读 · 0 评论