Java 多线程和锁知识笔记系列

本文全面解析了Java中的线程与锁机制,包括Thread类及Runnable接口的使用、线程生命周期、线程池原理、synchronized锁机制、volatile关键字、并发框架AQS以及常用锁工具类的详解。

前言

说到Java的运行,就离不开进程和线程,这两个概念其实也是所有编程语言的核心。无论是什么语言,归根结底就是在操作CPU,让CPU分配相应的计算资源给应用程序。而线程就是CPU能够调度和分派的基本单元,多个线程组合在一起做一件事情就变成了进程。既然有了多线程,那么如何保证数据一致性,保证线程有序性就成了Java编程中的重中之重,因此又有了锁的概念。可以说线程和锁是Java编程中基础的基础,但是由于其不好理解因此很少会被当作Java的基础去介绍和讲解。下面些博客会对Java中线程的使用、部分方法源码、以及锁的知识做一个整理,对自己是一个基础巩固,顺带希望能帮助其他人更好的理解线程。

【Java 线程知识笔记 (一) Thread与Runnable】
主要内容:Thread类的使用,Runnable接口的使用,线程的生命周期,生命周期状态的交替,线程执行的顺序,join()方法的源码实现等等内容。

【Java 线程知识笔记 (二) Callable与Future】
主要内容:Callable接口的使用,Future接口的使用,FutureTask类以及重要方法的使用,源码详解如何拿到线程中的返回值,FutureTask线程的状态变化,实现 Runnable 接口和实现 Callable 接口的区别等等内容。

【Java 线程知识笔记 (三) Executor与ThreadPool 其一】
主要内容:线程池与创建线程的效率比,ThreadPoolExecutor类的继承关系,ThreadPoolExecutor初始化,ThreadPoolExecutor#execute方法,ThreadPoolExecutor#addWork方法,重要的ThreadPoolExecutor.Worker内部类,ThreadPoolExecutor#processWorkerExit线程退出,以及线程池中线程的执行策略图等等内容。

【Java 线程知识笔记 (四) Executor与ThreadPool 其二】
主要内容:线程池的框架,官方文档中线程池的创建,常用的线程池类,线程池的生命周期,线程池生命周期的状态转换,线程池的安全关闭,源码探究线程如何做到线程复用的等等内容。

【Java 线程知识笔记 (五) synchronized 用法与原理分析】
主要内容:Java系统中的重号,错号,跳号是如何发生的以及问题的解决,synchronized 的锁机制,synchronized 的用法以及分类,synchronized 代码块堆栈分析,synchronized 代码块实现原理,synchronized 作为方法关键字的原理,以及如何找到并使用Java反编译文件等等内容。

【Java 线程知识笔记 (六) 锁与锁的状态升级】
主要内容:Java 1.6 的对synchronized的优化,对象头结构,锁的状态,自旋锁与锁消除,锁的状态升级,锁的重入性,死锁等等内容。

【Java 线程知识笔记 (七) volatile实现机制】
主要内容:volatile如何保证线程对资源的感知,volatile的原理,volatile保证数据的可见性原理,volatile保证线程的有序性原理,volatile的应用,volatile与synchronized的区别等等内容。

【Java 线程知识笔记 (八) 单例模式的演变】
主要内容:单例模式介绍,饿汉模式,懒汉模式,懒汉模式 + 同步锁,Double Checked Locking (DCL),Holder 模式,Enum模式等常用的单例模式实现、讲解、与效率对比等等内容。

【Java 线程知识笔记 (九) 并发框架AQS详解】
主要内容:AQS基本思想,AQS操作同步队列的方式,AQS 的用法,源码解析AQS,实现一个锁类等等内容。

【Java 线程知识笔记 (十) 常用的锁工具】
主要内容:本篇简单的介绍了ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier,Semaphore等等官网解释,以及使用场景和例子。

【Java 线程知识笔记 (十一) 实例区分synchronized锁住this、对象与类锁】
主要内容:实例区分synchronized锁住新的实例,类锁,锁住this,锁住普通的方法,锁住静态的方法,锁住一个普通对象会有什么表现。

【Java 线程知识笔记 (十二) 线程之间数据交互与顺序实例】
主要内容:两种方式实现线程交替打印。

【Java8使用Supplier启动ScheduledThread】
主要内容:一种实用的定时器启动方法。

【简单实现一个Java的Retry方法】
主要内容:实现Retry工具的一个例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值