加载中

多线程

文章分类

浏览该分类下的所有文章

14 篇文章 2

使用Java写简单的网络DDos攻击(仅用于学习)

本文分析一段使用Java线程池和URLConnection实现的“DDoS”示例代码,指出其无限循环创建线程池、线程爆炸、资源泄漏、无超时等设计缺陷,导致发起方和目标服务器均易崩溃。强调未经授权的使用属非法,违反《刑法》《网络安全法》。随后给出合法学习并发请求的改进建议,如复用单一线程池、设置超时、使用连接池或专业压测工具,并呼吁遵守法律、用于正当技术研究。

深入解析CompletableFuture的设计哲学与实践

本文阐述了Java 8 中 CompletableFuture 的设计理念与实现细节。首先强调函数式流式 API、Promise 异步模型以及强大的组合能力,使异步代码更简洁可读。随后剖析其内部状态机(INCOMPLETE、NORMAL、EXCEPTIONAL)和基于 Treiber 栈的回调链管理,说明完成、异常完成的原子操作。通过电商订单处理案例展示并行检查、组合、链式处理、异常容错、超时控制等实战用法,并给出批量处理、条件执行、重试、降级等高级模式。文章旨在帮助读者深入理解并在生产环境中高效使用 CompletableFuture。

Java虚拟线程(Project Loom):并发编程的新纪元

Java 21 引入的虚拟线程由 JVM 调度,创建与切换成本极低,可轻松实现百万级并发,且完全兼容现有并发 API,阻塞 IO 不再占用平台线程。配合结构化并发,可简化异步编程,适用于高并发 Web、批处理、微服务等场景。使用时应避免不必要的 pin(如 synchronized),优先使用 ReentrantLock,并利用 JDK 诊断工具监控。迁移建议在测试环境对比性能后逐步替换。虚拟线程被视为 Java 并发的革命性进步,为高并发应用提供更简洁高效的方案。

SpringBoot中ThreadLocal的妙用:原理、实战与避坑指南

ThreadLocal 通过 Thread 中的 ThreadLocalMap 为每条线程提供私有变量,适合在 SpringBoot 的 Servlet 线程池里传递登录态、TraceID 等上下文。文中示例了 UserContextHolder 与 Filter/Interceptor 的实现方式,并演示在 MDC 中绑定 TraceID。随后归纳四大常见坑:忘记 remove 导致内存泄漏、线程池不继承上下文、初始化时返回空、异步/事务中上下文丢失,并给出解决方案——在 finally 中调用 remove、使用 InheritableThreadLocal 或阿里 TransmittableThreadLocal、懒加载或显式传参。最后强调及时清理、限定作用域、选对工具,才能安全高效地在 SpringBoot 中使用 ThreadLocal。

深入剖析Java volatile关键字:多线程下的可见性与有序性保障

volatile是Java的轻量级同步手段,通过在写入时强制刷新主内存、失效缓存并插入内存屏障,保证变量的可见性并禁止指令重排。适用于状态标志、一次性安全发布等场景,但不提供复合操作的原子性,需配合synchronized或Atomic类使用。使用时应确保写入不依赖当前值且无其他不变式约束;读写开销略高于普通变量但低于synchronized,是性能与正确性之间的折中方案。

告别手动换算:一款为Java开发者打造的优雅延迟工具类

文章指出 Thread.sleep() 在实际开发中存在单位换算繁琐、异常处理冗余、灵活性差等问题,影响代码可读性和维护性。为此作者设计了 DelayUtils 工具类,提供 delaySeconds、delayMinutes 等多单位方法,内部统一处理 InterruptedException,并支持指数退避等动态延迟。通过封装实现更直观的调用、减少模板代码、提升灵活性和鲁棒性,推荐在需要明确时间单位或复杂重试机制的场景中使用该工具类,以提升开发效率和代码质量。

Java并发编程:从volatile关键字到Atomic类的底层原理与实战

本文阐述了 Java 并发中的两种关键机制:volatile 关键字通过强制每次读写主内存实现可见性并禁止指令重排,适用于简单状态标记的共享变量;Atomic 类利用底层 CAS 无锁算法提供原子操作,既保证可见性又确保复合操作的原子性,能够在避免 synchronized 开销的前提下提升并发性能。文章对两者的使用场景、性能及数据一致性进行对比,指出 volatile 适合单一读写,Atomic 更适合递增、递减等复合操作,并强调在实际开发中需根据具体需求权衡选择,以实现高效且安全的并发控制。

Java并发工具类:从CountDownLatch到CyclicBarrier的实战应用

本文介绍了 Java 并发包中的两大同步工具——CountDownLatch 与 CyclicBarrier。CountDownLatch 通过计数器让一个或多个线程等待指定数量的任务完成后再继续,适用于一次性任务汇总;CyclicBarrier 则让一组线程互相等待,所有线程到达屏障后一起继续执行,并且可以循环复用,适合多阶段并行处理。文中提供了完整的代码示例,帮助读者理解两者的原理、使用场景及区别,强调熟练运用这些工具可显著提升并发程序的效率与可靠性。

Java并发编程:深入理解Synchronized关键字与ReentrantLock

文章阐述了 Java 两大同步机制:synchronized 与 ReentrantLock。synchronized 为语言层面的隐式互斥锁,支持实例、类和代码块粒度,默认非公平且易用但功能有限;ReentrantLock 属于并发包,可显式加锁,提供公平/非公平选择、超时尝试、Condition 条件变量等高级特性,仍保持可重入。比较后指出,简单同步推荐使用 synchronized,复杂场景如细粒度控制或需条件变量时选 ReentrantLock。掌握二者并依据需求选型,可提升并发程序的性能与安全性。

Java面试必会知识点

抱歉,我无法直接访问该链接的内容。请您把文章的正文粘贴到聊天框中,我再为您生成符合要求的摘要。

面试现场【综合篇】

文章围绕面试常见技术点展开,先示例如何从项目经验、设计优化和代码亮点切入;随后系统阐述零拷贝的概念、实现方式及其对上下文切换和拷贝次数的削减;归纳五种IO模型,比较NIO与多路复用(select、poll、epoll)的区别与优势;解析FutureTask阻塞获取结果的内部状态机与等待机制;对比ReentrantLock与synchronized的实现原理及适用场景;并简要涉及乐观/悲观锁、AQS、Paxos、B+树、TCP拥塞、JVM调优、分库分表、分布式事务、RocketMQ可靠性等面试热点。整体提供了技术要点的概念解释与实现细节,帮助读者在面试中快速组织答案。

面试现场【多线程篇】

小邹说明多线程用于提高资源利用率和CPU并发能力,典型场景有高并发读写、耗时任务异步处理和定时任务。线程安全指多线程访问同一对象时无需额外同步仍能得到正确结果,常用手段包括原子类、CountDownLatch、Semaphore、java.util.concurrent集合、synchronized、Lock及分布式锁。synchronized 通过 monitorenter/monitorexit 实现对象头锁,方法级使用 ACC_SYNCHRONIZED 标志。ReentrantLock 需手动释放、可设公平性、支持可中断、超时及 tryLock。CAS(Compare‑And‑Swap)是乐观锁实现方式,AtomicInteger 等基于 CAS 完成无锁同步。