CodeGym
促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • 死锁(Deadlock):原因、示例与排除

    JAVA 25 SELF
    等级 53,课时 0
    本讲解读什么是 Java 中的线程互相阻塞(deadlock,死锁),它为何发生,以及构成它的四个必要条件。通过一个使用 synchronized 的实操示例演示如何复现问题,然后学习预防策略:统一的资源获取顺序、使用带超时的 ReentrantLock.tryLock、缩短临界区,及避免不必要的嵌套锁。还将展示如何通过 Thread Dump 和 jstack 进行诊断、识别 BLOCKED/ WAITING 状态,最后以检查清单和常见错误收尾。
    可用
  • Livelock 与 Starvation:定义与示例

    JAVA 25 SELF
    等级 53,课时 1
    拆解并发异常 Livelock 和 Starvation:它们与 Deadlock 的区别、在代码与日志中的表现。展示 Java 示例:“礼貌的工人”(活锁)以及因优先级和不公平锁导致的饥饿。学习如何发现问题(日志、 Thread dump、 VisualVM、 Java Mission Control)并加以预防:在重试前添加随机延迟( Thread.sleep)、使用非阻塞算法、通过带公平性标志的 ReentrantLock( new ReentrantLock(true))实现公平锁、谨慎划定临界区并避免滥用 setPriority() 与 synchronized。
    可用
  • 线程安全的集合:ConcurrentHashMap 等

    JAVA 25 SELF
    等级 53,课时 2
    在本讲中,我们将解释为什么普通集合( ArrayList、 HashMap)在多线程环境中是危险的,以及包 java.util.concurrent 提供了哪些线程安全的替代方案: ConcurrentHashMap、 CopyOnWriteArrayList、 ConcurrentLinkedQueue、基于跳表(skip-list)的结构和 BlockingQueue。我们将讨论诸如 merge、 putIfAbsent、 computeIfAbsent 之类的原子操作,与 Collections.synchronizedMap 做比较,并给出实践示例与常见错误(弱一致性迭代器、非原子性的操作序列等)。
    可用
  • AtomicInteger、AtomicReference:原子操作

    JAVA 25 SELF
    等级 53,课时 3
    为什么自增 i ++ 在多线程中不起作用,什么是原子操作,以及包 java.util.concurrent.atomic 如何提供这些操作。我们将讲解 AtomicInteger 和 AtomicReference,方法 incrementAndGet()、 compareAndSet(...),内部机制 CAS(Compare-And-Swap),以及何时更适合选择 synchronized、何时选择 LongAdder。最后——典型错误:复合操作、ABA 问题以及嵌套对象的线程安全。
    可用
  • 多线程程序的诊断与调试

    JAVA 25 SELF
    等级 53,课时 4
    如何使用 Thread Dump 搭配 jstack、VisualVM 和 IDE 进行采集与阅读,识别线程状态( RUNNABLE、 BLOCKED、 WAITING)并定位相互阻塞。我们将讲解在 Java Mission Control 与 Java Flight Recorder 中的线程监控、日志实践(线程名、进入/退出 synchronized)、最小化锁、使用 CountDownLatch 的并发测试,以及一个真实的死锁案例分析。最后——常见错误及其规避方法。
    可用
  • 并行性入门

    JAVA 25 SELF
    等级 54,课时 0
    本讲我们解析多线程与并行性的区别:何时重在响应性,何时在多核上获得真实加速。我们将讨论通过 Thread 创建线程、实现 Runnable 以及高级的线程池 ExecutorService,看看一个数组求和的简单示例,分析并行性何时有益、何时有害,以及常见问题:数据竞争、通过 synchronized 进行同步、死锁与负载均衡。最后——对比表和场景可视化。
    可用
  • ExecutorService、Callable、Future:启动任务

    JAVA 25 SELF
    等级 54,课时 1
    更专业地实践多线程:将任务提交给 ExecutorService,而不是手动创建 Thread;并管理线程池、队列和生命周期( shutdown()、 shutdownNow())。讲解 Runnable 与 Callable<T> 的区别,通过 Future 及其方法( get()、 isDone()、 cancel(...)、 isCancelled())获取结果。演示启动多个任务、 invokeAll/ invokeAny、处理 ExecutionException 以及常见错误。
    可用
  • 并行流:语法与应用

    JAVA 25 SELF
    等级 54,课时 2
    弄清如何用一行代码将普通数据流切换为并行处理——通过 parallelStream() 或 .parallel(),了解 ForkJoinPool.commonPool() 底层在做什么,何时并行确实能加速(大集合、计算开销大的操作),以及何时会变慢。我们将展示过滤、聚合、排序、性能测量的示例,并剖析常见错误: forEach 中的副作用、保持顺序、集合选择以及并行度配置。
    可用
  • ForkJoinPool 与 RecursiveTask:递归任务

    JAVA 25 SELF
    等级 54,课时 3
    Java 并行计算实用指南:任务池 ForkJoinPool 与递归任务 RecursiveTask<T>/ RecursiveAction 的工作原理,work-stealing 算法的优势,如何通过 fork() 拆分任务并在 compute() 内使用 join() 合并结果。我们将解析通过 pool.invoke() 启动、数组求和与查找最大值的示例、 ForkJoinPool 在 parallelStream() 中的位置,以及常见错误与规避方法。
    可用
  • 并行编程最佳实践

    JAVA 25 SELF
    等级 54,课时 4
    Java 并行编程实用指南:什么时候该使用 ExecutorService,哪里 parallelStream 更合适,以及哪些任务需要 ForkJoinPool。我们将讨论如何使用 ConcurrentHashMap/ CopyOnWriteArrayList 和原子类( AtomicInteger)来确保线程安全,如何通过 System.nanoTime() 和 JMH 进行性能测量,如何处理来自 Future.get() 和 ForkJoinTask 的错误,如何正确响应 InterruptedException,以及日志记录( Thread.currentThread().getName())与测试( Awaitility)的技巧。最后——工具选择表与常见错误汇总。
    可用
  • CompletableFuture 入门

    JAVA 25 SELF
    等级 55,课时 0
    在本讲中,我们将解释为什么同步代码会导致阻塞、 Future 有哪些限制(比如会阻塞的 get()),以及来自 java.util.concurrent 包的 CompletableFuture 如何改变处理异步的方式。我们会练习通过 supplyAsync 在后台启动任务,用 thenAccept/ thenApply 订阅结果,讨论 ForkJoinPool 的作用,以及一些典型错误:在主线程中使用 get()/ join()、没有通过 exceptionally/ handle 处理错误,等。
    可用
  • 异步任务:thenApply、thenAccept、thenRun

    JAVA 25 SELF
    等级 55,课时 1
    讲解如何使用 CompletableFuture 启动与组合异步计算:如何通过 supplyAsync 和 runAsync 启动任务, thenApply、 thenAccept、 thenRun 这些处理器有何区别,以及何时选择它们的异步版本 thenApplyAsync/ thenAcceptAsync/ thenRunAsync。我们还会讨论执行线程( ForkJoinPool 或你的 Executor)、结果类型( CompletableFuture<T>、 CompletableFuture<Void>)以及常见错误:阻塞的 get()/ join()、缺少 exceptionally/ handle/ whenComplete 的异常处理,以及试图在 thenRun 内使用结果等问题。
    可用
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 30
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym