news 2026/4/15 23:21:02

Java 多线程开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 多线程开发

Java 多线程开发是 Java 并发编程的核心内容,用于实现程序的并发执行,提高 CPU 利用率和系统吞吐量。以下是 Java 多线程开发的系统性介绍:


一、为什么需要多线程?

  • 提升性能:充分利用多核 CPU 资源。
  • 响应性:UI 线程不阻塞(如 Swing/JavaFX 中后台任务)。
  • 异步处理:如网络请求、文件 I/O、定时任务等。
  • 建模现实问题:如生产者-消费者、银行转账等并发场景。

二、创建线程的两种基本方式

1. 实现Runnable接口(推荐)

Runnabletask=()->System.out.println("Hello from thread: "+Thread.currentThread().getName());Threadt=newThread(task);t.start();

2. 继承Thread类(不推荐)

classMyThreadextendsThread{publicvoidrun(){System.out.println("Running in "+getName());}}newMyThread().start();

最佳实践:优先使用Runnable+Thread或更高级的并发工具(如线程池)。


三、线程的生命周期(6 种状态)

状态说明
NEW线程刚创建,未调用start()
RUNNABLE可运行(包括正在运行或等待 CPU 时间片)
BLOCKED等待获取监视器锁(如进入synchronized块)
WAITING无限期等待(如wait(),join(),LockSupport.park()
TIMED_WAITING限时等待(如sleep(1000),wait(1000)
TERMINATED线程执行完毕或异常终止

可通过Thread.getState()查看状态。


四、线程同步机制(解决共享资源竞争)

1.synchronized关键字

  • 修饰实例方法:锁当前对象(this
  • 修饰静态方法:锁类的Class对象
  • 同步代码块synchronized(obj) { ... },可指定任意锁对象

⚠️ 静态与非静态synchronized方法不互斥(锁对象不同)。

2.volatile关键字

  • 保证变量的可见性禁止指令重排序
  • 不保证原子性(如i++仍需同步)

3.java.util.concurrent.locks.Lock

  • 更灵活的显式锁(如ReentrantLock
  • 支持尝试获取锁、超时、公平锁等
Locklock=newReentrantLock();lock.lock();try{// 临界区}finally{lock.unlock();// 必须在 finally 中释放}

五、线程间通信

1.wait()/notify()/notifyAll()

  • 必须在synchronized块中调用
  • wait()释放锁并进入等待队列
  • notify()唤醒一个等待线程

2.Condition(配合Lock使用)

Locklock=newReentrantLock();Conditioncondition=lock.newCondition();// 等待lock.lock();try{condition.await();}finally{lock.unlock();}// 唤醒condition.signal();// 或 signalAll()

六、高级并发工具(java.util.concurrent包)

1. 线程池(核心!)

避免频繁创建/销毁线程,提升性能。

ExecutorServiceexecutor=Executors.newFixedThreadPool(4);executor.submit(()->{// 任务逻辑});executor.shutdown();

常用工厂方法:

  • newFixedThreadPool(n):固定大小线程池
  • newCachedThreadPool():弹性线程池(适合短任务)
  • newSingleThreadExecutor():单线程顺序执行
  • 生产建议:使用ThreadPoolExecutor自定义参数(避免Executors的隐藏风险)

2. 并发集合

  • ConcurrentHashMap:线程安全的 HashMap
  • CopyOnWriteArrayList:读多写少场景
  • BlockingQueue:如ArrayBlockingQueue,LinkedBlockingQueue(常用于生产者-消费者)

3. 同步工具类

  • CountDownLatch:等待 N 个任务完成
  • CyclicBarrier:多个线程互相等待到达屏障点
  • Semaphore:控制同时访问资源的线程数
  • CompletableFuture:异步编程(Java 8+)

七、常见问题与最佳实践

❌ 常见陷阱

  • 死锁(多个锁顺序不一致)
  • 活锁 / 饥饿
  • 内存可见性问题(忘记volatile或同步)
  • 过度同步(性能下降)

✅ 最佳实践

  1. 优先使用并发工具类(如ConcurrentHashMap而非Collections.synchronizedMap
  2. 缩小同步范围:只同步必要代码
  3. 避免在构造函数中启动线程
  4. 使用线程池管理线程,而非手动创建
  5. 命名线程:便于调试(new Thread(runnable, "MyWorker")
  6. 处理中断:响应InterruptedException,不要忽略

八、示例:生产者-消费者模型(使用BlockingQueue

BlockingQueue<Integer>queue=newArrayBlockingQueue<>(10);// 生产者Threadproducer=newThread(()->{try{for(inti=0;i<20;i++){queue.put(i);// 阻塞直到有空间System.out.println("Produced: "+i);}}catch(InterruptedExceptione){Thread.currentThread().interrupt();}});// 消费者Threadconsumer=newThread(()->{try{while(!Thread.currentThread().isInterrupted()){Integeritem=queue.take();// 阻塞直到有元素System.out.println("Consumed: "+item);}}catch(InterruptedExceptione){Thread.currentThread().interrupt();}});producer.start();consumer.start();

总结

Java 多线程开发从基础线程创建到高级并发工具,是一个逐步演进的过程。现代 Java 开发应:

“少用原始 Thread,多用 Executor;少用 synchronized,多用并发集合和原子类;善用 CompletableFuture 实现异步非阻塞。”

掌握这些知识,你就能写出高效、安全、可维护的并发程序。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/2 3:16:12

借助大数据分析实现电商市场洞察

借助大数据分析实现电商市场洞察 关键词:大数据分析、电商市场洞察、数据挖掘、消费者行为、市场趋势 摘要:本文围绕借助大数据分析实现电商市场洞察展开,深入探讨了大数据在电商领域的重要性及应用。详细介绍了相关核心概念、算法原理、数学模型,通过项目实战展示了如何运…

作者头像 李华
网站建设 2026/4/4 10:03:25

从心出发,向善而行——北京东慧公益基金会成立大会在京圆满举办

立春时节&#xff0c;春意渐暖&#xff0c;善念生辉。近日&#xff0c;以“从心出发&#xff0c;向善而行”为主题的北京东慧公益基金会成立大会在北京成功举办。来自首都教育、健康、文化、慈善等领域行业协会的嘉宾&#xff0c;以及北京、天津、上海、广州、成都、武汉等多地…

作者头像 李华
网站建设 2026/4/14 8:53:16

智慧园区:那些被技术消灭的“沉默成本”

当访客在写字楼前台排队登记时&#xff0c;当上班族在停车场兜圈找车位时&#xff0c;当会议室空调对着空无一人的房间持续制冷时——这些被习以为常的低效场景&#xff0c;正在智慧园区的升级浪潮中被逐个击破。传统园区里那些隐形的“沉默成本”&#xff0c;那些被忽视的时间…

作者头像 李华
网站建设 2026/4/3 5:14:39

对标国际标杆,数字冰雹 智能作战想定编辑工具 定义“新一代”战场仿真

在国防智能化转型加速的今天&#xff0c;作战推演、军事训练、装备研发等场景对 “高保真、全场景、高效率” 想定编辑工具的需求日益迫切。一款能够精准复刻战场环境、支撑多维度任务需求、适配不同用户层级的作战想定工具&#xff0c;成为打通 “仿真 - 训练 - 实战” 链路的…

作者头像 李华
网站建设 2026/4/14 2:50:33

SSM智能线上教育mo0l5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面

系统程序文件列表 系统项目功能&#xff1a;学员,教师,课程类型,课程,课件资料,课程目录 SSM智能线上教育系统开题报告 一、课题研究背景与意义 &#xff08;一&#xff09;研究背景 随着互联网技术与教育行业的深度融合&#xff0c;线上教育已成为传统教育的重要补充&#…

作者头像 李华