Java并发编程
文章平均质量分 94
楼仔
一枚小小的Go/Java代码搬运工!
展开
-
【Java并发编程系列9】锁
主要讲解Java中常见的锁。前言并发编程系列应该快接近尾声,锁可能是这个系列的最后一篇,重要的基本知识应该都涵盖了。然后对于书籍《Java并发编程实战》,最后面的几章,我也只看了锁的部分,这篇文章主要是对该书中锁的内容进行一个简单的总结。死锁死锁是指一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。锁顺序死锁我们先看一个死锁的示例,我们先定义个BankAccount对象,来存储基本信息,代码如下:publicclassBankAccount{...原创 2021-08-05 07:15:28 · 173 阅读 · 0 评论 -
【Java并发编程系列8】多线程实战
主要基于小米最近的多线程项目,抽离出里面的多线程实例。昨天听到袁老去世的消息,非常震惊,一代巨星的陨落,希望袁老在天堂能安好,贴了一张袁老的照片,这张照片也让我想起已在天堂的爷爷。前言Java多线程的学习,也有大半个月了,从开始学习Java多线程时,就给自己定了一个小目标,希望能写一个多线程的Demo,今天主要是兑现这个小目标。这个多线程的示例,其实是结合最近小米的一个多线程异步任务的项目,我把里面涉及到多线程的代码抽离出来,然后进行一定的改造,之所以不自己重写一个,一方面是自...原创 2021-08-05 07:15:41 · 347 阅读 · 0 评论 -
【Java并发编程系列7】线程池基本知识
主要讲解Java线程池的基础知识。前言目前书籍《Java并发编程实战》看到“第7章:取消与关闭”,里面涉及到部分线程池的内容,然后第8章就是线程池,所以打算把之前看的线程池的资料再整理一下,便于后面能更好理解书中的内容。之前看过一篇博客,关于线程池的内容讲解的非常好,我只截取基础知识部分,把Java基础内容全部掌握后,再对里面的原理部分进行深入理解,后面会附上该篇博客的链接。初识线程池我们知道,线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁原创 2021-08-05 07:15:52 · 241 阅读 · 0 评论 -
【Java并发编程系列6】同步工具类
主要讲解Java常用的同步工具类,包括闭锁/FutureTask/信号量/栅栏,最后还对“创建线程的三种方式”进行简单的扫盲。前言《Java并发编程实战》这本书看到第五章了,里面的同步工具类感觉比较常用,就简单总结一下。不过在讲“同步工具类”前,大家需要对创建线程的三种方法非常清楚,如果这个不清楚的话,直接看示例可能不太懂,文章最后面有“创建线程的三种方式”内容,已经给Java小白扫盲,谁让楼哥是暖男呢。同步工具类闭锁用途:可用于命令一组线程在同一个时刻开始执行某个任务,或原创 2021-08-09 07:55:51 · 265 阅读 · 0 评论 -
【Java并发编程系列5】对象的共享
主要总结《Java并发编程实战》中“第3章:对象共享”的内容。前言在没有Java相关并发知识的前提下,第一次看这本书《Java并发编程实战》,其实有些看不太懂,因为里面的很多知识讲的比较抽象,比如可见性、volatile、final等讲的其实都不深入,所以导致自己理解的也很片面。后来就先专门看了“Java内存模型”相关的知识,再对相关知识理解起来,就要深入一些,所以才有了前面写的4篇关于“Java内存模型”相关的文章。“第二章:基础知识”主要讲解线程安全性、原子性、加锁机制(主要讲解内置...原创 2021-08-05 07:13:58 · 110 阅读 · 0 评论 -
【Java并发编程系列4】final
主要讲解final的内存语义和使用方式。前言看这篇文章前,建议先看完《Java并发编程系列1-基础知识》,因为相关知识有很强的依赖,这篇文章也是Java内存模型JMM相关文章的最后一篇。final禁止指令重排分析该部分内容基本摘抄自《深入理解Java内存模型》,仅加入自己的总结,更详细讲解可以直接参考此书。对final域的读和写更像是普通的变量访问,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量...原创 2021-08-04 09:17:27 · 133 阅读 · 0 评论 -
【Java并发编程系列3】synchronized
主要讲解synchronized的应用方式和内存语义。前言看这篇文章前,建议大家先看我前面的文章《Java并发编程系列1-基础知识》,否则里面的相关知识看不懂,特别是并发编程相关的可见性、有序性,以及内存模型JMM等。在Java中,关键字synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到synchronized另外一个重要的作用,synchronized可保证一个线程的变化(主要是共...原创 2021-08-04 09:17:20 · 120 阅读 · 0 评论 -
【Java并发编程系列2】volatile
主要讲解volatile的相关知识,以及容易遇到的坑。volatile变量的特性保证可见性,不保证原子性: 当写一个volatile变量时,JMM会把该线程本地内存中的变量强制刷新到主内存中去; 这个写操作会导致其他线程中的volatile变量缓存无效。 禁止指令重排,我们回顾一下,重排序需要遵守一定规则: 重排序操作不会对存在数据依赖关系的操作进行重排序。比如:a=1;b=a; 这个指令序列,由于第二个操作依赖于第一个操作,所以在编译时和处理器运行时这两个操作不...原创 2021-08-04 09:17:12 · 124 阅读 · 0 评论 -
【Java并发编程系列1】基础知识
主要讲解Java的并发编程的基础知识,包括原子性、可见性、有序性,以及内存模型JMM。Java系列说明从这篇文章开始,我就要正式开始学习Java了,之所以说是从现在开始,是因为前两个月一直在纠结是否转技术栈(细心的同学可以发现,我之前写的文章,其实和Java并没有什么关系),现在已经想清楚了,既然确定要转Java技术栈,那就踏踏实实从头开始学吧。目前的我,可以说是Java小白,刚转团队不久,也就接触了2个月的Java,代码没写几行,既然发现自己Java很菜,那就要列个学习计划,将这块知识...原创 2021-08-04 09:17:06 · 165 阅读 · 0 评论