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

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • Observer 模式(观察者)

    JAVA 25 SELF
    等级 50,课时 3
    行为型设计模式“观察者”:角色 Subject 和 Observer,通过 addObserver/ removeObserver 进行订阅/取消订阅,并用 notifyObservers 方法分发通知。解析与 Java 事件模型的关系: button. addActionListener( listener) ; → 调用 actionPerformed()。通过示例进行实践(温度计与空调、迷你计数器与 lambda 表达式),以及为什么 java.util.Observable/ Observer 已被弃用与现代的替代方案。
    可用
  • EDT 线程与 UI 中的耗时操作

    JAVA 25 SELF
    等级 50,课时 4
    在本讲中我们讲解什么是 UI 事件处理线程—— EDT(用于 Swing)及其对应的 JavaFX Application Thread,为什么界面组件不是线程安全的,以及为何在执行重任务时窗口会“卡住”。我们将展示正确做法:通过 new Thread(...) 将计算放到后台,使用 SwingUtilities.invokeLater 和 Platform.runLater 来更新界面,以及使用更高层的工具 SwingWorker<T, V> 与 Task<V>/ Service<V> 来处理进度、取消与错误。
    可用
  • 多线程入门:为什么需要它

    JAVA 25 SELF
    等级 51,课时 0
    为什么程序需要线程和并行性:从响应式界面到用满所有处理器内核。我们将解析进程与线程的区别、 JVM 中主线程 main 的角色、实际案例(UI、服务器、文件处理)以及风险: race condition、 deadlock,还有诸如 synchronized 之类的基础同步工具。并展示一个使用 Thread 并行启动两个任务的简单示例。
    可用
  • 线程启动:Thread 与 Runnable,语法

    JAVA 25 SELF
    等级 51,课时 1
    本讲解介绍在 Java 中如何启动线程:认识 Thread 类和 Runnable 接口,学习正确调用 start(),不要把它与 run() 混淆,使用匿名类与 lambda 表达式,启动多个线程,并了解生命周期( NEW → RUNNABLE → TERMINATED)。我们还会讲 Thread.currentThread()、 getName()、通过 join() 等待以及诸如 IllegalThreadStateException 之类的常见错误。
    可用
  • 线程的状态与生命周期

    JAVA 25 SELF
    等级 51,课时 2
    我们来剖析 Java 中线程的生命周期:从 Thread.State (
    NEW
    ,
    RUNNABLE
    ,
    BLOCKED
    ,
    WAITING
    ,
    TIMED_WAITING
    ,
    TERMINATED
    ) 到它们之间的转换。学习使用 Thread.sleep(...)、 join()、 interrupt() 管理线程,通过 isAlive() 和 getState() 诊断状态,并避免使用 stop()/ suspend()/ resume() 等过时方法。最后——实用建议与常见错误。
    可用
  • 线程参数与优先级

    JAVA 25 SELF
    等级 51,课时 3
    如何通过实现 Runnable 的类的构造函数安全地向线程传递参数、何时适合使用 lambda 表达式,以及为何字段最好声明为 final。解析线程优先级: setPriority/ getPriority 方法, Thread.MIN_PRIORITY、 Thread.NORM_PRIORITY、 Thread.MAX_PRIORITY 常量及其对调度器的影响。另外——通过构造函数为线程命名, setName/ getName,实践示例与典型错误(共享 Runnable、setter、对优先级的过度期望)。
    可用
  • 竞态条件(race condition)

    JAVA 25 SELF
    等级 51,课时 4
    在本讲中,我们讲解什么是竞态条件:当多个线程同时访问共享数据,而结果取决于调度顺序。以自增 counter ++ 为例,展示为什么该操作不是原子的,以及增量是如何丢失的。我们分析一个银行账户的实战案例、在生产环境中的后果以及防护手段: synchronized、来自 java.util.concurrent.atomic 的原子类型(例如 AtomicInteger),以及不可变性。最后以“典型错误”一节收尾,解释为什么与 Thread 相关的 bug 很少被测试捕获,以及为何用 Thread. sleep( 1) 来“治疗”它们是没有意义的。
    可用
  • 共享资源与同步:并发访问问题

    JAVA 25 SELF
    等级 52,课时 0
    这节课将介绍在多线程应用中什么是共享资源,为什么会出现竞态条件(race condition)和“丢失更新”,以及如何使用 synchronized 保护数据。我们将拆解同步的基本用法(方法与代码块),讨论来自 java.util.concurrent 的现代工具( Lock、 ReentrantLock、 Semaphore 等),看看计数器递增的实践示例以及常见错误( i ++ 非原子性、错误的锁对象、关于 volatile 的误区)。
    可用
  • synchronized, volatile:语法与用法

    JAVA 25 SELF
    等级 52,课时 1
    多线程实战讲座:讲解关键字 synchronized(代码块与方法、对象监视器以及在类级别 ClassName.class 上的锁)的工作方式;区分通过 volatile 提供的可见性与操作原子性的差别;为什么将 boolean 标志设为 volatile 很方便,而自增 count ++ 需要同步。对比何时选择 synchronized、何时选择 volatile,并剖析常见错误。
    可用
  • ReentrantLock 与 ReadWriteLock:区别与示例

    JAVA 25 SELF
    等级 52,课时 2
    通过实践对比基于 synchronized 的经典同步与来自包 java.util.concurrent.locks 的更灵活原语: ReentrantLock 和 ReadWriteLock。我们将讲解如何显式管理锁( lock()/ unlock()、带超时的 tryLock())、如何使用 ReentrantReadWriteLock 扩展读取并发,“公平性”( fair 模式)是什么意思、各个工具适用的场景,以及最常见的错误。
    可用
  • 互斥锁与信号量:语法与实践

    JAVA 25 SELF
    等级 52,课时 3
    在本讲中,我们将解析 Java 中的关键同步原语:如何使用 synchronized 和 ReentrantLock(方法 lock()/ unlock(),以及 try- finally 结构)保护临界区,还将介绍如何通过 Semaphore 限制并行度(方法 acquire()/ release())。我们会在表格中对比互斥锁与信号量,讨论实际用例(银行、连接数受限的服务器)以及导致 deadlock 和性能损失的典型错误。
    可用
  • 同步常见错误解析

    JAVA 25 SELF
    等级 52,课时 4
    对 Java 多线程常见错误的实战拆解:在 ReentrantLock 和 Semaphore 上忘记调用 unlock()/ release()(用 try- finally 解决)、为 synchronized 选择了错误的监视器、互相阻塞的死锁(deadlock)与加锁顺序、过度同步,以及 volatile 的适用边界与用 AtomicInteger 的替代。配套示例、建议和通俗类比——让代码不再“卡死不动”。
    可用
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...
  • 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