Java多线程
文章平均质量分 79
ZZZhonngger
一只有女朋友的程序猿
展开
-
AQS的应用:基于AQS实现自定义同步器
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等三、基于AQS实现自定义同步器之前学习了这么多关于AQS的原理性的知识,这一期,我们来基于AQS实现一个不可重入的独占锁, 自定义AQS需要重写一系列函数,还需要定义原子变量state的含义。这里我们定义, state=0 表示目前锁没有被线程持有 ,state=1 表示锁己经被某一个线程持有。 由于是不可重入锁,所以不需要记录持有锁的线.原创 2020-12-24 18:13:16 · 456 阅读 · 1 评论 -
AQS——条件变量的支持
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等二、AQS对条件变量的支持1、条件变量之前的推文中,讲解过notify和wait是配合synchronized内置锁来实现线程间同步的,而条件变量的signal和await方法则是通过AQS来实现线程间同步的。两者的不同之处在于:synchronized同时只能与一个共享变量的notify或wait方法实现同步AQS的一个锁可以对.原创 2020-12-11 18:30:35 · 379 阅读 · 0 评论 -
AQS对锁的底层支持
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、AQS对锁的底层支持AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。1、概述首先看看AQS的类图:其中Node节点的类图是:结合两张图和源码,我们可以知道AQS以及Node的特性:AQS是一个FIFO的双向队列,其内部通过节点he.原创 2020-11-26 18:23:05 · 366 阅读 · 0 评论 -
锁原理分析系列——LockSupport工具类
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等前面学习了很多Java并发编程的知识,很多知识点都离不开锁的支持,从这期开始,主要讲解一些Java并发包中的锁的原理,让我们来一起揭开它的神秘面纱吧。LockSupport工具类LockSupport是JDK中rt.jar包里的工具类,其主要作用是挂起和唤醒线程,它也是创建锁和其他同步类的基础。LockSupport类与每个使用它的线.原创 2020-11-25 19:30:35 · 412 阅读 · 0 评论 -
高并发下你还敢用ArrayList?过来看看CopyOnWriteArrayList吧!
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、ArrayList线程不安全在Java的集合框架中,想必大家对ArrayList肯定不陌生,单线程的情况下使用它去做一些CRUD的操作是非常方便的,先来看看这个例子:public class ListTest { public static void main(String[] args) { List<.原创 2020-11-21 15:56:10 · 712 阅读 · 2 评论 -
浅谈比LongAdder功能更强大的LongAccumulator
一、前言上一期分析了LongAdder的原理,这期我们来学习下比LongAdder功能更强大的LongAccumulator。要是上期LongAdder不记得的同学就再看看这篇:高并发下解决AtomicLong性能瓶颈的方案——LongAdder 来回顾一下~LongAdder是本期要学习的LongAccumulator的一个特例,下面我们一起来探究下LongAccumulator。二、浅谈LongAccumulator1、LongAccumulator的结构如图,LongAccumulator类同原创 2020-11-16 20:53:11 · 295 阅读 · 0 评论 -
高并发下解决AtomicLong性能瓶颈的方案——LongAdder
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、 LongAdder简介LongAdder类是JDK1.8新增的一个原子性操作类。上一节说到,AtomicLong通过CAS提供了非阻塞的原子性操作,相比用阻塞算法的synchronized来说性能已经得到了很大提升。在高并发下大量线程会同时竞争更新同一个原子变量,但由于只有一个线程的CAS操作会成功,这就造成了大量线程竞争失败后,会通.原创 2020-11-15 22:42:33 · 1116 阅读 · 2 评论 -
JUC中原子操作类原理分析
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、前言java.util.concurrent 包里提供了一系列的原子性操作类,这些类都是使用CAS机制实现的,相当于使用锁实现原子性操作在性能上有了很大的提高。由于原子性操作类的原理都大致相同,所以本文主要讲解AtomicLong类的常用方法的分析。二、原子变量操作类AtomicLongAtomicLong是原子性递增或者递减类,其.原创 2020-11-12 20:21:32 · 408 阅读 · 0 评论 -
浅谈Java中的“八锁”——概述、常见实现方式与使用场景
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、锁锁其实是操作系统中的一个概念。在多线程编程中,操作系统引入了锁机制。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。所谓的锁,可以理解为内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功;如果已经.原创 2020-11-10 19:15:40 · 847 阅读 · 0 评论 -
解决多线程间共享变量线程安全问题的大杀器——ThreadLocal
微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验等…大三、大四的同学还可以找我帮忙【虎牙】内推噢。上一期,讲到了关于线程死锁、用户进程、用户线程的相关知识,不记得的小伙伴可以看看:字节跳动面试官问我:你知道线程死锁吗?用户线程、守护线程的概念与区别了解吗?这期,我们来聊一聊一个在Java并发编程中很重要的类:ThreadLocal 在多线程应用程序中,对共享变量进行读写的场景是很常见的。如果不使用.原创 2020-11-04 19:34:00 · 1534 阅读 · 0 评论 -
2020大厂必问面试题(Java多线程)
2021届实习必备面试题1.请谈谈你对 volatile 的理解答:volatile 是 Java 虚拟机提供的轻量级的同步机制。保证可见性不能保证原子性禁止指令重排序要完整地回答好这题,还需要理解Java内存模型(JMM)。JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。JMM 同步规定线程解锁前,必须把共享变量...原创 2020-03-11 10:57:15 · 4644 阅读 · 11 评论 -
Java多线程学习(七)
Java多线程学习(七)2020.3.3学习总结1.为什么要使用线程池线程池优势:线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了线程池的最大线程数量,超出数量的线程排队等候,等其他线程执行完成后,再从队列中取出任务来执行。它的主要特点是:线程复用,控制最大并发数,管理线程。降低资源消耗。通过重复利用已创建的线程降低线程...原创 2020-03-03 14:14:12 · 252 阅读 · 0 评论 -
Java多线程学习(六)
Java多线程学习(六)2020.3.2学习总结1.获取多线程的第三种方式之前的学习总结中,提到了两种多线程的获取方式,一是继承Thread类,二是实现Runnable接口。今天来学习第三种方式——实现Callable接口class Test1 implements Callable<Integer>{ @Override public Integer ca...原创 2020-03-02 10:11:10 · 296 阅读 · 0 评论 -
Java多线程学习(五)
Java多线程学习(五)2020年3月1日学习总结集合类是我们常用的开发工具,它们所封装的数据结构给我们的开发带来了极大的便利,随着从单线程开发环境到多线程开发环境的转换,有些集合类的使用不当,会造成不同程度的错误,给程序带来极大的影响。现在就集合类的线程安全性来做一些总结。1.ArrayList线程不安全1.1先来看看单线程环境下,ArrayList的add方法和遍历public cl...原创 2020-03-01 10:33:11 · 218 阅读 · 0 评论 -
Java多线程学习总结(四)
Java多线程学习总结(四)——2020.02.24学习总结1.线程间的通信wait()和notifyAll()的应用实例:package com.Zhongger.Day05;/** * @Author Zhongger * @Description 有两个线程,可以操作初始值为0的一个变量,实现一个线程对该变量加1,一个对该变量减1,实现交替,来10轮 * @Date 202...原创 2020-02-24 13:17:11 · 125 阅读 · 0 评论 -
Java多线程学习总结(三)
Java多线程学习总结(三)——2020.02.23学习总结线程同步(二)(1)同步阻塞昨天的学习知道了,线程可以通过调用synchronized方法来获得锁;还有一种机制可以获得锁,即通过进入一个同步阻塞。当线程进入如下形式的阻塞: synchronized (obj){ //代码 }于是它会获得obj的锁,这会获得一个Java对象锁。(2)监视器概念一种设计模...原创 2020-02-23 11:33:37 · 114 阅读 · 0 评论 -
Java多线程学习总结(一)
Java多线程学习总结(一)从今天开始(2020.2.19),我就要进入Java多线程的学习了,可以说这是我最薄弱的环节,一是我是非科班的,未学习过操作系统;二是我自学JavaSE的时候,直接就跳过了多线程。虽然说在牛客网上刷练习题时遇到多线程的题,多多少少有去了解一些,但是不够系统。所有,接下来的几篇博客,都会是我结合Java核心技术卷一卷二的多线程和并发的内容以及尚硅谷的JUC教程系统学习多...原创 2020-02-19 14:04:56 · 209 阅读 · 0 评论