首页
学习
活动
专区
工具
TVP
发布

晏霖

专栏作者
92
文章
150840
阅读量
24
订阅数
并发相关工具
我们在并发编程中,经常会使用到一些工具来帮助我们控制线程。本章节就会对CountDownLatch、CyclicBarrier、Semaphore工具的应用进行简单的介绍。
胖虎
2020-12-22
5040
Java中的原子类
在前面的内容中,我们已经学习了CAS的原理,所以对于学习本节来说会非常容易。本节介绍Java中的原子类是java.util.concurrent.atomic包下的对象,他们之所以有原子性的共性,都来源于CAS,可见CAS的重要性。对于原子类变量的操作是不会存在并发性问题的,不需要使用同步手段进行并发控制。它底层自身的实现即可保证变量的可见性以及操作的原子性,一般我们可以使用AtomicInteger,AtomicLong等实现计数器等功能,利用AtomicBoolean实现标志位等功能。
胖虎
2020-12-22
6360
并发容器和队列
在我们开发中,经常会使用到容器来存储对象或数据,容器的作用非常大,合理使用各个容器的特性和方法可以简化开发,提高系统性能和安全性。
胖虎
2020-12-22
3420
线程池
在实际开发中,我们的项目里是杜绝在某些业务中直接继承Thread类或者实现Runnalbe接口等方式创建线程的,因为这样创建的每一个线程都会经历创建、运行直至销毁,缺乏统一管理,并且这样会导致无限制创建新线程,线程互相竞争,严重时会占用过多的系统资源或内存溢出(OOM)。在JDK1.5推出的java.util.concurrent(简称JUC)并发工具包中又一并发利器就是线程池,需要做异步或并发执行任务都可以使用线程池。使用线程池可以带来以下好处。
胖虎
2020-12-08
4840
Java中的锁
本章节介绍Lock接口的应用,以及Lock最核心的队列同步器AbstractQueuedSynchronizer(AQS)源码浅析,进而分析AQS的典型实现ReentrantLock(重入锁)、ReentrantReadWriteLock(读写锁)的使用方法和场景,以及和synchronized进行对比分析。本章先会带领大家分析AQS,然后才会介绍与Lock相关的API和工具,本着先原理后应用的顺序,学习AQS会有些抽象,理论地方试着多读或抽象出模型来更好理解记忆。
胖虎
2020-12-08
3250
synchronized
Synchronized是同步中的鼻祖,很多人叫他重量级锁,也是最基本的同步互斥手段。随着Java版本不断提高,尤其是在Java6之后Synchronized进行了很多性能优化。本章首先要简单介绍对象头的内容,然后引申出Synchronized的实现原理,锁的储存结构和锁升级等,以及相关所有锁的概念,都会一一向大家介绍。
胖虎
2020-12-08
4490
CAS
在此部分讲解CAS概念是因为后面部分章节将会有很多地方使用到他,因为CAS是并发框架的基石,所以相当重要,读者需提前了解。本章节从概念、案例、源码浅析,一直到Java中一些典型的地方使用到CAS进行介绍。
胖虎
2020-12-08
8240
volatile
不知朋友们在编写多线程代码时,对于共享内存变量是否很好的处理呢,接下来我们将介绍volatile语义、特性、和使用。
胖虎
2020-12-08
5030
简述Java内存模型
在介绍Java内存模型(JMM)前,我要打消读者一个错误的认知,那就是JMM与JVM到底是什么关系,现在告诉大家,Java虚拟机模型(JVM)与Java内存模型(JMM)没有本质上的联系。为什么这么说,我来解释一下:想必我的读者大部分都是Java开发工程师,成为一名Java开发工程师必备的两点,就是要了解Java的语法,以及使用Java API,拥有这两点你就可以编写Java代码,编写后的代码需要在Java虚拟机上运行,其实上面我已经把JDK的组成说了出来。JDK(Java Development Kit)就是由Java程序设计语言、Java API类库、Java虚拟机这三部分组成的,是Java程序开发的最小环境(如图2-6所示)。也就是说想要开发Java程序,必备的就是JDK。我们还可以继续把Java API类库分成Java SE API子集和Java虚拟机两部分统称JRE(Java Runtime Environment),JRE是Java程序运行的标准环境。所以说Java虚拟机模型(JVM)是将Java文件编译成class文件并运行class文件的软件,而Java内存模型(JMM)主要定义了线程与内存之间的细节,现在看来两者并没有直接的关系。
胖虎
2020-12-08
3930
并发与并行
我们理解了什么是线程,以及线程与进程对关系,那么我们现在可以简单理解为,并发就是在同一时刻多个线程操作同一物理CPU(或多个物理CPU)上的资源。
胖虎
2020-11-24
9190
线程
并发编程在开发一般的项目确实接触很少,也导致平时学习的机会也不多,基本上都是碰到相关问题时会查一些相关资料去解决,所以很少会对这本分知识有系统和全面的了解。虽说对于一般开发人员接触较少,但是我们也是深刻认识到这部分的内容对于面试的出场率基本是100%,如果把这部分内容啃下来,你的java基础知识储备会上升一个台阶。
胖虎
2020-11-24
2570
类加载机制
学习本章前我们要对类文件结构有一个简单的认识,而学习类文件结构没有任何难度,更多的是参考《Java虚拟机规范》、《Java语言规范》中定义的规则。我们要对class文件了解,知道class文件格式、包括常量池类型、访问表示类型、属性表结构及名称等等。例如我们可以在我们的IDEA下载jclasslib插件,然后打开我们的Java文件进行学习,如图1-29所示。左侧是我们的Java文件,右侧是我们插件展示的部分,我们可以看到字节码指令,其文件结构都展示在jclasslib的左侧标签中。
胖虎
2020-11-24
3780
垃圾收集器
HotSpot按照分代收集,所以在不同代上产生了多种不同的收集器,随着时间的推移,有些已经弃用,有些已经成为经典,还有目前广泛使用的,如图1-19所示就是7个经典的垃圾收集器,其中G1是目前应用最为广泛的,还有一些是JDK8以上支持的垃圾收集器,图中并未展示,后面小结中会提到。
胖虎
2020-11-24
3650
垃圾收集算法及细节
这是我们一贯认为的垃圾收集方式,在大多的商业虚拟机中几乎都遵循着分代收集的理论。分代收集理论建立在以下三个方面。
胖虎
2020-11-24
2890
Linux搭建FastDFS单机版
FastDFS特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
胖虎
2019-10-14
3.4K2
面试官:简历上说精通垃圾收集器?来吧,挨个给我说一遍
上文已经讲解垃圾收集的各种算法,算法可以理解为方法,如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。
胖虎
2019-07-19
5870
为什么HotSpot有‘对象’,因为他会垃圾分类和回收
想和HotSpot一样吗?安全的管理众多的对象,掌握着对象的生与死。前文我们了解了对象在内存中的整个生命周期的是什么样的,程序运行就要无限的创建对象,我们Java 虚拟机一定要对对象进行控制,不能让其泛滥,所以Java 虚拟机有一个特别重要的功能就是垃圾回收,把没用的对象进行回收,释放内存,这样程序才能稳定的在虚拟机上运行。
胖虎
2019-07-10
3790
CountDownLatch讲解-Junit实现多线程测试
我们知道使用junit进行多线程测试时,主线程执行完毕后直接结束所有线程,(这就好比我前文说线程五种状态中的“STOP”,就是不接受新任务,中断当前正在运行的任务。)导致很多子线程没有执行完呢就已经关闭了,所以为了解决这个问题我们就需要讲解一个JUC又一个重要的类CountDownLatch,使用AQS状态表示计数,可以把它看成是一个计数器,源码注释第一句话:A synchronization aid that allows one or more threads to wait until,翻译过来就是:允许一个或多个线程等待。好,让我们揭开CountDownLatch的面纱,并用它解决junit多线程问题。
胖虎
2019-06-26
1.3K0
java并发队列之阻塞队列-ArrayBlockingQueue
今天讲阻塞队列,阻塞队列有很多,这篇文章只讲解ArrayBlockingQueue,其他的大同小异。
胖虎
2019-06-26
8790
Mysql优化方面的面试题
本文是个人在各种地方收集过来,包括自己总结的问题,都参杂在内,适合中级或者中上级开发面试的难度。
胖虎
2019-06-26
7980
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档