《Java 100 天进阶之路》第60.4篇:多线程代码示例集(2026版)

发布时间:2026/10/31 14:25:20

《Java 100 天进阶之路》第60.4篇:多线程代码示例集(2026版) 第60.4篇多线程代码示例集2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第60.3篇多线程生产环境避坑清单 |➡️ 下一篇第61篇JVM内存区域待发布️ 本文阅读地图2 分钟速览多线程面试不仅问原理还要写代码。本文汇总 10 个可直接背诵的代码模板覆盖线程创建、锁使用、线程池、异步编排、原子类、ThreadLocal 等所有场景分类代码模板数量线程创建2 个模板锁与并发工具3 个模板线程池2 个模板异步编程1 个模板原子类与 CAS1 个模板ThreadLocal1 个模板文章目录第60.4篇多线程代码示例集2026版️ 本文阅读地图2 分钟速览模板1线程创建方式方式一继承 Thread方式二实现 Runnable推荐方式三实现 Callable有返回值方式四线程池 虚拟线程模板2synchronized 三种用法用法一修饰实例方法锁 this用法二修饰静态方法锁 Class用法三修饰代码块粒度最细模板3ReentrantLock 标准模板独占锁tryLock 超时模板防死锁模板4死锁演示代码面试手写模板5线程池标准创建模板模板6CompletableFuture 异步编排模板7原子类使用AtomicInteger 计数器LongAdder 高并发计数器AtomicStampedReferenceABA 解决AtomicIntegerFieldUpdater零内存开销模板8ThreadLocal 标准用法基础用法 remove静态 ThreadLocal 初始化跨线程池传递TTL 你的学习进度 下一篇文章预告模板1线程创建方式方式一继承 ThreadclassMyThreadextendsThread{Overridepublicvoidrun(){System.out.println(线程: Thread.currentThread().getName());}}newMyThread().start();方式二实现 Runnable推荐Runnabletask()-System.out.println(线程: Thread.currentThread().getName());newThread(task).start();方式三实现 Callable有返回值CallableStringtask()-{Thread.sleep(1000);return结果;};FutureTaskStringftnewFutureTask(task);newThread(ft).start();Stringresultft.get();// 阻塞获取结果方式四线程池 虚拟线程// 传统线程池ExecutorServicepoolnewThreadPoolExecutor(5,10,60L,TimeUnit.SECONDS,newArrayBlockingQueue(100),r-newThread(r,biz-pool-%d),newThreadPoolExecutor.CallerRunsPolicy());pool.execute(()-System.out.println(任务));// 虚拟线程JDK 21Thread.startVirtualThread(()-System.out.println(虚拟线程));ExecutorServicevPoolExecutors.newVirtualThreadPerTaskExecutor();vPool.submit(()-System.out.println(虚拟线程池任务));模板2synchronized 三种用法用法一修饰实例方法锁 thispublicsynchronizedvoidmethodA(){// 同一实例的 synchronized 方法互斥}用法二修饰静态方法锁 ClasspublicstaticsynchronizedvoidmethodB(){// 该类的所有实例互斥}用法三修饰代码块粒度最细privatefinalObjectlocknewObject();publicvoidmethodC(){synchronized(lock){// 只锁这部分}}模板3ReentrantLock 标准模板独占锁ReentrantLocklocknewReentrantLock();lock.lock();try{// 业务逻辑}finally{lock.unlock();// 必须在 finally 中释放}tryLock 超时模板防死锁ReentrantLocklockAnewReentrantLock();ReentrantLocklockBnewReentrantLock();if(lockA.tryLock(1,TimeUnit.SECONDS)){try{if(lockB.tryLock(1,TimeUnit.SECONDS)){try{// 两把锁都拿到执行业务}finally{lockB.unlock();}}}finally{if(!lockB.isHeldByCurrentThread()){lockA.unlock();// 获取B失败释放A}}}else{// 超时处理}模板4死锁演示代码面试手写publicclassDeadlockDemo{privatestaticfinalObjectAnewObject();privatestaticfinalObjectBnewObject();publicstaticvoidmain(String[]args){newThread(()-{synchronized(A){try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(B){System.out.println(线程1 获取B);}}}).start();newThread(()-{synchronized(B){try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(A){System.out.println(线程2 获取A);}}}).start();}}模板5线程池标准创建模板publicclassAsyncThreadPool{privatestaticfinalintCPU_CORESRuntime.getRuntime().availableProcessors();// IO 密集型线程池publicstaticfinalExecutorServiceIO_POOLnewThreadPoolExecutor(CPU_CORES*2,CPU_CORES*4,60L,TimeUnit.SECONDS,newArrayBlockingQueue(1000),r-newThread(r,io-pool-System.currentTimeMillis()),newThreadPoolExecutor.CallerRunsPolicy());// CPU 密集型线程池publicstaticfinalExecutorServiceCPU_POOLnewThreadPoolExecutor(CPU_CORES,CPU_CORES1,60L,TimeUnit.SECONDS,newArrayBlockingQueue(100),r-newThread(r,cpu-pool-System.currentTimeMillis()),newThreadPoolExecutor.AbortPolicy());// 优雅关闭publicstaticvoidshutdown(ExecutorServicepool){pool.shutdown();try{if(!pool.awaitTermination(60,TimeUnit.SECONDS)){pool.shutdownNow();}}catch(InterruptedExceptione){pool.shutdownNow();Thread.currentThread().interrupt();}}}模板6CompletableFuture 异步编排// 串行依赖CompletableFuture.supplyAsync(()-1).thenApply(x-x1).thenApply(x-x*2).thenAccept(System.out::println);// 并行合并CompletableFutureIntegerf1CompletableFuture.supplyAsync(()-10);CompletableFutureIntegerf2CompletableFuture.supplyAsync(()-20);f1.thenCombine(f2,Integer::sum).thenAccept(System.out::println);// 多任务聚合 超时 异常CompletableFutureVoidallCompletableFuture.allOf(f1,f2,f3);all.completeOnTimeout(null,3,TimeUnit.SECONDS).exceptionally(e-{log.error(,e);returnnull;}).join();模板7原子类使用AtomicInteger 计数器AtomicIntegercountnewAtomicInteger(0);count.incrementAndGet();// 返回新值count.getAndIncrement();// 返回旧值count.compareAndSet(5,10);LongAdder 高并发计数器LongAdderaddernewLongAdder();adder.increment();adder.add(5);longtotaladder.sum();// 弱一致性AtomicStampedReferenceABA 解决AtomicStampedReferenceStringrefnewAtomicStampedReference(A,0);int[]stampnewint[1];Stringoldref.get(stamp);ref.compareAndSet(old,B,stamp[0],stamp[0]1);AtomicIntegerFieldUpdater零内存开销classUser{volatileintage;}AtomicIntegerFieldUpdaterUserupdaterAtomicIntegerFieldUpdater.newUpdater(User.class,age);UserusernewUser();updater.incrementAndGet(user);模板8ThreadLocal 标准用法基础用法 removepublicclassThreadLocalDemo{privatestaticfinalThreadLocalStringCONTEXTnewThreadLocal();publicvoidprocess(StringuserId){try{CONTEXT.set(userId);doBusiness();}finally{CONTEXT.remove();// 必须}}privatevoiddoBusiness(){StringuserIdCONTEXT.get();// ...}}静态 ThreadLocal 初始化privatestaticfinalThreadLocalSimpleDateFormatDATE_FORMATThreadLocal.withInitial(()-newSimpleDateFormat(yyyy-MM-dd HH:mm:ss));// 使用DATE_FORMAT.get().format(new Date());跨线程池传递TTL// 引入依赖com.alibaba:transmittable-thread-localTransmittableThreadLocalStringttlnewTransmittableThreadLocal();ttl.set(traceId);RunnabletaskTtlRunnable.get(()-System.out.println(ttl.get()));threadPool.submit(task); 你的学习进度当前第60.4篇 ·多线程专题外挂代码示例集✅ 已完成基础篇44篇 第45~60篇 第60.1~60.4篇 正在学第60.4篇⏳ 待学习第61~108篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第61篇JVM内存区域》内容简介JVM 内存布局堆、元空间、虚拟机栈、本地方法栈、程序计数器、JDK 8 变化、各区域内存溢出场景与排查。JVM 调优与故障排查专题正式开启《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送
延伸阅读

更多相关文章

2026/10/31 20:49:53

高速ADC核心性能与JESD204B接口设计实战解析

1. 项目概述:为什么我们需要ADC31JB68这样的高速ADC?在无线通信、雷达探测或者高端测试仪器里,我们工程师常常面临一个核心挑战:如何把现实世界中瞬息万变、频率极高的模拟信号,一丝不苟地“搬进”数字世界进行处理&am…

2026/10/31 22:50:07

Hermes 消息平台配置飞书

一、相关文档 飞书 / Lark 设置 https://hermes-agent.ac.cn/docs/user-guide/messaging/feishu 二、多种配置方式 2.1 命令行交互式配置(推荐) 2.1.1 hermes gateway setup Select a platform to configure:↑↓ navigate ENTER/SPACE select ES…

2026/11/1 2:01:37

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

2026/11/1 2:01:37

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

2026/11/1 2:01:37

关于“贾子猜想”的数学地位、结构特征与讨论边界

关于“贾子猜想”的数学地位、结构特征与讨论边界摘要 本文对“贾子猜想”进行基于公开表述与现有数学事实的分析。该猜想主张:当正整数 n3m>5(即 n6,9,12,15,…)时,方程x₁ⁿ x₂ⁿ ⋯ xₙⁿ yⁿ不存在正整数解。文章首先…

2026/11/1 2:01:37

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

2026/11/1 2:01:37

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

2026/11/1 1:56:37

华为OD机试真题 新系统 2026-10-28 JavaGoC【社交网络消息转发】

目录 题目 思路 Code 题目 题目内容: 在一个社交网络中,有 N 个用户(编号 0 到 N−1);每个用户都有一个「转发名单」(整数),该数二进制格式中的第 i 位为 1 表示此用户会把消息转发给第 i 个用户。 给定一个整数数组 forwardLists 和一个整数 initialSenders,请…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑