随笔分类 - Java并发编程
摘要:本篇学习目标 回顾CLH同步队列的结构。 学习独占式资源获取和释放的流程。 CLH队列的结构 我在Java并发包源码学习系列:AbstractQueuedSynchronizer#同步队列与Node节点已经粗略地介绍了一下CLH的结构,本篇主要解析该同步队列的相关操作,因此在这边再回顾一下: AQS
阅读全文
摘要:本文基于JDK1.8 本篇学习目标 了解AQS的设计思想以及重要字段含义,如通过state字段表示同步状态等。 了解AQS内部维护链式双向同步队列的结构以及几个重要指针。 了解五种重要的同步状态。 明确两种模式:共享模式和独占模式。 学习两种模式下AQS提供的模板方法:获取与释放同步状态相关方法。
阅读全文
摘要:本文基于JDK1.8 ThreadLocal是啥?用来干啥? public class Thread implements Runnable { //线程内部局部变量 ThreadLocal.ThreadLocalMap threadLocals = null; //子线程继承父线程的变量 Thre
阅读全文
摘要:本文基于JDK1.8 Atomic原子类 原子类是具有原子操作特征的类。 原子类存在于java.util.concurrent.atmic包下。 根据操作的数据类型,原子类可以分为以下几类。 基本类型 AtomicInteger:整型原子类 AtomicLong:长整型原子类 AtomicBoole
阅读全文
摘要:CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。类似于join的操作,可以进行类比: join用于让当前执行线程等待join线程执行结束,如A.join()方法,将不停检查A线程是否存活,如果A存活,则当前线程永远等待。 public class J
阅读全文
摘要:几种Executors创建的常见线程池总结 FixedThreadPool 可重用固定线程池数的线程池,任务队列使用的是无界的LinkedBlockingQueue。 FixedThreadPool运行示意图【图片来源《Java并发编程的艺术》】 如果当前运行的线程数小于 corePoolSize,
阅读全文
摘要:并发编程三大特性 原子性 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。 对于基本数据类型的访问,读写都是原子性的【long和double可能例外】。 如果需要更大范围的原子性保证,可以使用synchronized关键字满足。
阅读全文
摘要:说说自己对于synchronized关键字的了解 synchronized关键字用于解决多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 值得注意的是,在Java早期,JDK1.6之前,synchronized属于重量级锁,效
阅读全文
摘要:进程和线程? 进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,进程是动态的。 系统运行一个程序就是一个进程从创建,运行到消亡的过程。 Java中,启动main函数的时候其实就是启动了一个JVM进程,而main函数所在的线程就是这个进程的主线程。 线程? 线程是一个比进程更小的执行单位。
阅读全文
摘要:为什么要用线程池? 池化技术:减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到
阅读全文
摘要:Lock位于java.util.concurrent.locks包下,是一种线程同步机制,就像synchronized块一样。但是,Lock比synchronized块更灵活、更复杂。 话不多说,我们直接来看官方文档对Lock接口相关概念及功能的描述,今天又是看英文文档,翻译理解的一天。 一、Loc
阅读全文

浙公网安备 33010602011771号