3 高并发相关 JVM 与 JDK 新特性案例详解

felix.shao2025-02-16

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 高并发与编程实战]
Last Updated 2/16/2025, 4:13:06 PM