Java多线程与远程调用分享-邢晓兵
需积分: 9 136 浏览量
更新于2024-08-18
收藏 1.73MB PPT 举报
"邢晓兵在2017年1月的部门分享中,主题聚焦于多线程,包括基本理论、同步工具、线程池等关键概念。分享中提到了几种实现线程同步和通信的方式,如FutureTask、CountDownLatch以及wait/notify机制,并深入探讨了AQS(AbstractQueuedSynchronizer)及其应用。此外,还讨论了线程关闭、T级数据搬家等相关话题。"
在多线程编程中,发起远程调用经常涉及线程的同步和管理。以下是一些核心知识点的详细说明:
1. **阻塞当前线程的方法**:
- **FutureTask**: 是一个可以取消的异步计算任务,它实现了RunnableFuture接口,允许你获取或检查计算结果,同时也可以取消任务。
- **CountDownLatch**: 是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。计数器初始值为给定的整数,在计数器归零前,await() 方法会阻塞所有线程;一旦计数器归零,所有等待的线程都会被释放。
- **wait/notify**: 这是Java对象监视器方法,用于线程间通信。wait() 使当前线程进入等待状态,直到其他线程调用同一对象的notify() 或 notifyAll() 方法将其唤醒。
2. **AQS (AbstractQueuedSynchronizer)**:
- AQS 是一个框架,用于构建锁和其他同步组件,如ReentrantLock、Semaphore等。它基于一个整型状态字段(state)和一个FIFO等待队列来实现线程同步。
- **独占与共享模式**:AQS 支持两种模式,独占模式(如锁)和共享模式(如信号量)。tryAcquire 和 tryRelease 用于独占模式,tryAcquireShared 和 tryReleaseShared 用于共享模式。
- **SYN队列与condition队列**:SYN队列是等待获取锁的线程形成的FIFO队列,而condition队列则用于线程等待特定条件满足后被唤醒。
3. **线程关闭**:在Java中,线程的终止可以通过中断(interrupt)、退出代码(return)或者显式停止(例如,使用Future的cancel方法)。
4. **线程池**:
- 线程池提高了效率,避免频繁创建和销毁线程的开销。当任务是同类型且相互独立时,线程池表现最佳。但是,如果任务速度不一致或者存在依赖,可能会导致线程等待,影响性能。
- 使用线程池的注意事项包括:合理设置线程池大小,考虑任务性质,以及确保worker线程能快速响应新任务。
5. **并发容器**:
- 如ConcurrentHashMap,采用了分段锁策略,减少了锁竞争,适合读多写少的场景。它通过特殊的HashEntry设计和条件判断,保证了并发环境下的高效访问。
6. **线程状态与上下文切换**:
- 线程状态包括新建、运行、等待、阻塞和终止。上下文切换是指CPU从一个线程的执行状态切换到另一个线程,这涉及到保存和恢复寄存器、栈等信息,每次上下文切换都有一定的开销。
7. **锁的原则**:
- 无锁同步:尽可能避免使用锁,减少锁的使用可以降低竞态条件和死锁的风险。
- 缩短锁的持有时间:尽量让线程快速完成其持有锁的操作,减少其他线程等待的时间。
- 降低线程请求锁的频率:优化代码逻辑,减少对锁的频繁请求。
这些知识点构成了Java多线程编程的基础,理解和掌握它们对于编写高效的并发代码至关重要。
点击了解资源详情
点击了解资源详情
点击了解资源详情
638 浏览量
916 浏览量
1610 浏览量
1303 浏览量
点击了解资源详情
点击了解资源详情
清风杏田家居
- 粉丝: 21
- 资源: 2万+
最新资源
- Cooking Converter-crx插件
- Huomobian.zip_matlab例程_matlab_
- lilyPAD-开源
- 传单挑战:家庭作业
- 定价博弈matlab代码-RLS:Iskhakov,Rust和Schjerning撰写的论文“递归词典搜索:找到有限状态定向动态博弈的所有马尔
- spring
- forecastico:使用meteor.js和brain.js进行股票预测在线应用
- KickFire Prospector - Free Prospecting Tool-crx插件
- 前端自定义拖拽可视化工具dome
- krunseti-开源
- 自述生成器
- c语言自创军旗游戏源码.zip
- BS5-Admin-HTML-Template:Bootstrap 5响应式HTML管理模板
- HANDWRITTEN-DIGIT-RECOGNITION
- homework-9-SSB-332-
- Cusdom_Open.rar_工具条_C++_Builder_