
《Java并发编程的艺术》
文章平均质量分 97
《Java并发编程的艺术》一书的学习总结
晓之木初
船到桥头自然直,前提是你努力过!
展开
-
Java Fork/Join框架学习(二)
Java Fork/Join框架源码的基础知识,深入学习具体的方法时,可以查阅该博客原创 2022-10-05 21:32:27 · 938 阅读 · 0 评论 -
Java Fork/Join框架学习(一)
JDK 7开始,引入了Fork/Join框架,此文围绕Fork/Join框架进行学习原创 2022-10-03 17:51:56 · 1033 阅读 · 0 评论 -
Java Future学习
Java Future学习原创 2022-09-07 23:26:11 · 488 阅读 · 0 评论 -
Java高并发之ReentrantLock、读写锁
1. 可重入锁ReentrantLock① 重进入之前在学习同步器时,实现了独占锁Mutex。该锁存在一个缺陷:当一个线程调用Mutex的lock()方法获取锁之后,如果再次调用Mutex的lock()方法获取该锁,该线程将会被阻塞。即Mutex不支持重进入,在实现时没有考虑到占有锁的线程再次获取锁的场景。synchronized支持隐式的重进入,在递归调用synchronized方法时......原创 2019-10-06 19:31:28 · 1077 阅读 · 0 评论 -
层层递进,实现单例模式
面向对象编程,通过new创建一个类的对象,一般叫做创建该类的实例对象根据需要,我们可以创建任意个实例对象,并为这些对象赋予不同的属性值单例就是只有一个实例对象的意思单例模式,就是设计一个类,该类只有一个实例对象。为了方便描述,本文将这样的类直接叫做Singleton1. 入门引导1.1 需求分析私有构造函数要想一个类只能有一个实例对象,首先应该回收构造函数,避免外部类通过构造函数创建多个实例对象这时,应该将构造函数定义为私有的Java中构造函数的有以下规定若类中为定义.原创 2021-10-19 00:43:18 · 504 阅读 · 1 评论 -
从SimpleDateFormat看线程安全的实现方法
1. SimpleDateFormat的线程安全之前的博客:java时间格式中大小写问题,记录了使用SimpleDateFormat时,时间格式小时的HH写成了hh导致的问题当时,关于时间差异的问题,同事还提醒过我SimpleDateFormat不是线程安全的,不要定义成类的成员变量自己平时使用SimpleDateFormat时,一般都是立即使用立即定义,也就是将其定义为局部变量定义为局部变量,自然也就不存在线程安全的问题1.1 多线程下使用SimpleDateFormat多线程访问同一原创 2021-11-14 17:45:31 · 685 阅读 · 0 评论 -
Java线程间通信之wait/notify、join
1. wait / notify1.1 已掌握的实现线程间通信的方法之前有学习Java的管道流:Java管道输入/输出流的简单学习通过管道流,可以实现线程间通信除此之外,还可以使用volatile共享变量实现线程间通信public class VolatileCommunicate { private volatile boolean ready; public VolatileCommunicate() { ready = false; }原创 2021-11-13 18:12:19 · 1418 阅读 · 0 评论 -
Java线程的状态转换 & 如何停止线程
1. Java线程的状态转换1.1 Java线程的状态转换图Java线程在整个生命周期可能处于6种不同的状态,但任意时刻只能处于一种状态随着代码的执行,Java线程会在不同的状态之间切换,具体如图所示1.2 状态的说明NEW状态新建一个线程对象,但还未调用start() 方法线程类:实现Runnable接口或继承Thread类得到的一个线程类RUNNABLE状态线程对象被创建后,其他线程调用该线程的start()方法,该线程将处于RUNNABLE状态,位于可运行线程池中原创 2021-11-10 00:17:06 · 1291 阅读 · 0 评论 -
Java并发编程的挑战
1. 基础知识1.1 串行、并行、并发串行,就是任务一个接一个的执行。并行,就是同一时刻,有多个任务在同时运行。计算机为SMP或多核架构,才能同一时刻运行多个任务并发,是一种假的并行。在单核处理器中,同一时刻只能处理一个任务每个任务只运行一小段时间(时间片),不停地切换任务时间片一般只有几十毫秒,使得多个任务看起来在同时运行一样举个多孩家庭的例子(响应国家号召????)老王家生了3个孩子,每个孩子年龄相差不大,都处于需要喂饭的时候妈妈为了照顾小的,先从小的开始一个一个原创 2021-10-10 21:05:06 · 240 阅读 · 0 评论 -
synchronized学习
1. synchronized的三种使用方式之前,学习集合类时,经常提到某些集合是线程同步的,或者说线程安全的因为,它们的方法使用synchronized进行修饰,以保证实例对象是线程安全的1.1 普通同步方法普通同步方法:synchronized修饰普通成员方法,锁住的是当前类的实例对象普通同步方法如下:每隔10毫秒打印0 ~ 5的数值public synchronized void printNum() { try { for (int i = 0; i原创 2021-10-17 20:24:05 · 346 阅读 · 1 评论 -
Java原子操作与原子类
1. 概述1.1 什么是原子操作原子操作的书面定义:不可中断的一个或一系列操作这样的定义是晦涩难懂的,可以结合银行转账的例子来说明lucy向Bob转账100元,预期的操作步骤:lucy的账户减少100元,Bob的账户增加100元银行系统不是很智能,lucy的账户减少100元后,由于某些问题系统服务崩溃即使系统恢复了,既没有将Bob的账户增加100元,完成转账操作;也没有恢复lucy账户,告知转账失败可以说,银行转账的过程应该是一个整体,其顺序不能被打乱,也不能被突然中止;要么都执行成功原创 2021-10-23 00:31:21 · 980 阅读 · 0 评论 -
ThreadLocal学习
ThreadLocal学习原创 2021-11-25 09:30:29 · 1040 阅读 · 1 评论 -
Java内存模型
《Java并发编程的艺术》第3章的标题《Java内存模型》,初一看自己还以为讲解的JVM的内存模型(堆、栈、方法区等)真正学习时,发现这一章的内容组织对自己来说比较难理解,学得迷迷糊糊的查看了一些资料,起码比不看的效果更好:自己之前的博客:Java高并发之JMM(java内存模型、volatile变量、JMM的三大特性)短小精悍的Java学习笔记:Java并发 —— 十、Java 内存模型发现《Java并发编程的艺术》第3章,就是在详细介绍Java并发编程的三大特性中的两个特性:可见性、有.原创 2021-10-31 14:58:04 · 307 阅读 · 0 评论 -
Java管道输入/输出流的简单学习
之前,因为学习HDFS,专门梳理了基于的文件的输入/输出流:基于文件的java输入/输出流学习并发编程关于如何实现线程间通信,就有介绍使用管道流实现线程间通信管道字节流:PipedInputStream、PipedOutputStream,管道字符流:PipedWriter、PipedReader本文将基于管道字节流,来学习如何使用管道流1. 管道的理解1.1 管道管道,直接看成一节水管就行。水管要想使用起来,1.2 管道入口和出口应该使用哪种流?我是个微胖人士,平时管不住嘴、迈.原创 2021-11-06 14:08:22 · 1421 阅读 · 0 评论 -
JMX学习
1. 絮絮叨叨1.1 Java程序包含哪些线程?使用Java进行多线程编程的人,多少可能都知道执行main()方法的是一个名为main的线程通过new Thread新建线程,若不指定线程名,默认线程名为Thread-xx。其中xx是从0开始的编号public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(() -> System.out.println原创 2021-11-07 00:35:12 · 3535 阅读 · 0 评论