Java
未读
Java 程序调用 FFmpeg 教程
本文介绍Java调用FFmpeg实现视频处理的方法。核心原理是通过ProcessBuilder启动外部进程执行FFmpeg命令,相较于Runtime.exec()更安全灵活。文中给出视频压缩示例,强调需指定ffmpeg完整路径、设置工作目录,并异步读取stdout/stderr以防缓冲阻塞,最后根据退出码判断执行结果。
Java
未读
Java实现期末成绩发布邮件通知
该Java项目通过定时发送HTTP请求查询课程成绩,并将结果与之前记录对比,发现新成绩时会自动发送邮件通知。主要功能包括:个人成绩更新通知、批量通知其他同学查询成绩及Cookie过期提醒。使用了Apache HttpClient进行网络请求,Jackson库解析JSON数据,以及JavaMail API发送邮件。配置信息存储在`config.properties`文件中,项目依赖和打包设置通过Maven管理。此外,还提供了Docker部署建议以解决容器时间问题。
Java
未读
在 Spring Boot 项目中,如何在非 Web 层(如 AOP)中获取 Session 信息
本文介绍在 Spring Boot 非 Web 层(如 AOP 切面)中获取 Session 信息的方法。由于 Service 层应保持协议无关,默认无法直接访问 HttpSession;可通过 Spring 的 RequestContextHolder 结合 ThreadLocal 获取当前请求上下文,从而在 AOP 或 Service 中读取 Session。该方法仅适用于 HTTP 请求触发的调用链,定时任务、异步方法及 MQ 消费者等场景无法使用,需注意适用边界。
Java
未读
Java多线程(五):深入理解Java线程池与ThreadPoolExecutor
引言 在前四篇文章中,我们系统地探讨了Java多线程的核心概念:从线程的创建、生命周期,到线程同步的 synchronized 关键字,再到保证内存可见性的 volatile 关键字。这些知识为我们构建并发程序打下了坚实的基础。 然而,在实际的高并发应用开发中,如果每次需要执行任务时都创建一个新线程
Java
未读
Java多线程(四):深入理解 volatile 关键字与内存可见性
在前几篇文章中,我们探讨了多线程的创建方式、生命周期以及使用 synchronized 关键字进行线程同步。通过 synchronized,我们解决了多线程环境下共享数据操作的原子性和可见性问题,确保了线程安全。然而,synchronized 作为一种重量级的互斥锁,在某些特定场景下可能显得“大材小
Java
未读
Java多线程(三):线程同步与 synchronized 关键字详解
在前两篇文章中,我们学习了多线程的三种创建方式以及线程的生命周期与状态转换,掌握了线程从创建到终止的全过程。然而,当多个线程并发访问共享资源时,如果没有适当的协调机制,就可能出现数据不一致、竞态条件(Race Condition) 等严重问题。 本文将深入探讨 Java 中最基础也是最重要的线程同步
Java
未读
Java多线程(二):线程的生命周期与状态转换
本文详解 Java 线程的六种生命周期状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED),并结合代码说明各状态间的转换关系及触发方法(如 start、synchronized、wait/notify、sleep、join 等),帮助读者构建线程运行机制的完整认知。
Java
未读
Java多线程(一):多线程的三种创建方式
本文介绍了Java多线程的三种创建方式:继承Thread类、实现Runnable接口、实现Callable接口。继承Thread类简单直观,但受限于单继承;实现Runnable接口解耦任务与线程,支持Lambda,最常用;Callable接口支持返回结果和抛出异常,配合FutureTask使用。文章强调推荐实现Runnable接口,并注意处理线程中断。