3 高并发相关 JVM 与 JDK 新特性案例详解
3 高并发相关 JVM 与 JDK 新特性案例详解
1 概述
很多概念会在 JVM 小节介绍,传送门。
后续会在 JVM 并发小节详细梳理一些概念性问题。
2 JVM 核心概念及 JVM 对高并发的支持
略。
2.1 内存区域与内存模型
略,详见 JVM 小节。
2.2 使用 volatile 解决可见性及重排序问题
略,详见 JVM 小节。
- 范例 1 代码(单例模式)
com.bltj.ch03.Singleton
。 - 范例 2 代码(volatile 非线程安全)
com.bltj.ch03.TestVolatile_1
。 - 范例 3 代码(atomic 原子性)
com.bltj.ch03.TestVolatile_2
。
3 Java 对同步机制的解决方案及案例解析
本节介绍如何用各种方式的 “锁” 来实现同步机制,从而保障共享资源在高并发环境中的线程安全性。
3.1 使用 synchronized 解决并发售票问题与死锁演示
- 范例 4 代码(并发售票)
com.bltj.ch03.ThreadDemo01
。 - 范例 5 代码(死锁)
com.bltj.ch03.DeadLock
。
3.2 使用线程通信、队列及线程池模拟生产者与销售方场景
- 范例 6 代码(生产者与消费者)
com.bltj.ch03.ProducerAndConsumer
。 - 范例 7 代码(生产者与消费者-使用 BlockingQueue 队列改进方案)
com.bltj.ch03.producerconsumer.TestProducerAndConsumer
。
3.3 使用 Lock 重构生产消费者及线程通信
- 范例 8 代码(使用 Lock + Condition 实现生产者与消费者)
com.bltj.ch03.lock.CarStock
。 - 范例 9 代码(线程交替打印-使用 Lock)
com.bltj.ch03.print.TestLoopPrint123
。 - 范例 10 代码(尝试加锁)
com.bltj.ch03.lock.TestTryLock
。 - 范例 11 代码(中断等待)
com.bltj.ch03.lock.TestInterruptibly
。
3.4 CAS 无锁算法
略。
3.5 使用信号量(Semaphor)实现线程通信
- 范例 12 代码(线程控制-同一线程最多允许 3 个线程同时执行)
com.bltj.ch03.TestSemaphore
。 - 范例 13 代码(线程交替打印-使用 Semaphor)
com.bltj.ch03.print.LoopPrint123WithSemaphore
。
4 不可不学的 Java 新特性
略,非重点。
4.1 Lambda 及函数式接口实例讲解
- 范例 14 代码(Lambda 表达式基础)
com.bltj.ch03.jdk.HelloWorld
。 - 范例 15 代码(特殊的函数式接口)
com.bltj.ch03.jdk.MyFunctionalInterface
。 - 范例 16 代码(Lambda 表达式编写风格一)
com.bltj.ch03.jdk.TestLambda
。 - 范例 17 代码(类型推测)
com.bltj.ch03.jdk.TestLambda
。 - 范例 18 代码(Lambda 表达式编写风格二)
com.bltj.ch03.jdk.TestLambda
。 - 范例 19 代码(BiFunction 接口的实现)
com.bltj.ch03.jdk.TestBiFunction
。
4.2 5 种形式的方法引用演示案例
- 范例 20 代码(方法引用- 示例 1 "类名 :: 静态方法名")
com.bltj.ch03.jdk.TestMethodRef.test01()
。 - 范例 21 代码(方法引用- 示例 2 "对象的引用 :: 非静态方法名")
com.bltj.ch03.jdk.TestMethodRef.test02()
。 - 范例 22 代码(方法引用- 示例 3 "对象的引用 :: 非静态方法名")
com.bltj.ch03.jdk.TestMethodRef.test02_2()
。 - 范例 23 代码(方法引用- 示例 4 "类名 :: 非静态方法")
com.bltj.ch03.jdk.TestMethodRef.test03()
。 - 范例 24 代码(方法引用- 示例 5 "类名 :: new")
com.bltj.ch03.jdk.TestMethodRef.test04()
。 - 范例 25 代码(方法引用- 示例 6 "数组类型[] :: new")
com.bltj.ch03.jdk.TestMethodRef.test05()
。
4.3 通过案例详解 Stream 流式处理的生成、转换与终端操作
- 范例 26 代码(创建流)
com.bltj.ch03.jdk.TestStreamAPI.test01()
。 - 范例 27 代码(转换流)
com.bltj.ch03.jdk.TestStreamAPI.test02()
。 - 范例 28 代码(转换 Stream 操作-排序操作)
com.bltj.ch03.jdk.TestStreamAPI.test02()
。 - 范例 29 代码(终端操作)
com.bltj.ch03.jdk.TestStreamAPI.test03()
。
参考文献
- [亿级流量 Java 高并发与编程实战]