
Java并发编程学习笔记.xmind
5星
- 浏览量: 0
- 大小:None
- 文件类型:XMIND
简介:
本思维导图总结了Java并发编程的核心概念和实践技巧,涵盖线程、锁机制及并发工具类等内容,适合初学者快速掌握并发编程知识。
Java并发编程
背景介绍:
**并行历史**
**必要性**
- 并发编程能够提高程序的性能。
进程与线程:
- 进程是资源分配的基本单位。
- 线程则是CPU调度的基本单位,且具有轻量级的特点。
线程的优势包括:
1. 提高处理器利用率,从而提升系统吞吐率;
2. 通过使用线程可以简化复杂异步工作流的建模;
3. 改善服务器应用程序处理多客户端请求的能力;
4. 减少用户界面响应时间。
然而,引入线程也带来了一些风险:
- 线程安全性问题:确保不会出现不可预料的行为。
- 活跃性问题:保证正确的事情最终会发生;服务延迟、响应迟缓等问题也是需要考虑的方面。
线程的应用场景包括定时器(Timer)、Servlet/JSP开发、远程方法调用(RMI)和GUI框架中的Swing/ AWT等。
基础知识:
**线程安全性**
- 当多个线程访问某个类时,这个类始终能表现出正确的行为,则称其为线程安全的。
原子性:一组不可分割的操作;避免竞态条件。
锁的作用包括实现加锁机制、保护状态和共享访问。但不恰当使用可能会导致性能问题。
**对象的共享策略**
- 包括线程封闭(Ad-hoc线程封闭,栈封闭)、ThreadLocal类以及只读共享等方法。
分类:
1. 不可变对象
2. 事实不可变对象
3. 线程安全共享
设计线程安全的类时可以采用实例封装、委托等策略。
**同步容器**
- 同步容器如Vector和Hashtable通过将状态封装起来,并对每个公有方法进行同步来实现。
问题:复合操作可能导致竞态条件;修正方式包括客户端加锁或使用并发容器(如ConcurrentHashMap,CopyOnWriteArrayList)。
Java 5与6中引入了新的同步工具类:
- 闭锁、CountDownLatch用于等待一组事件;
- FutureTask支持异步任务执行;
- Semaphore和CyclicBarrier分别实现资源池管理和多线程协作。
**信号量(Semaphore)**
管理并发访问的许可数;应用场景包括互斥体、资源池及有界容器。
栅栏与闭锁的区别在于所有参与线程必须同时到达,且可以重用。Exchanger用于两方交换数据。
**线程池**
- 线程饥饿死锁:避免长时间运行的任务占满核心线程。
ThreadPoolExecutor的配置参数:
1. 核心大小(corePoolSize);
2. 最大数量(maximumPoolSize);
3. 保持时间(keepAliveTime);
4. 阻塞队列(workQueue)。
饱和策略包括AbortPolicy、DiscardPolicy等;线程工厂用于自定义创建方式。
**递归算法的并行化**
- 构建并发应用程序时,需明确任务边界及执行策略。
使用Executor框架:
1. newFixedThreadPool;
2. newCachedThreadPool;
3. newSingleThreadExecutor;
4. newScheduledThreadPool。
找出可利用的并行性;处理非正常终止和JVM关闭等场景。
**线程池定制**
- 避免任务与执行策略间的隐式耦合,合理设置大小。
性能优化:
1. 消除串行瓶颈(如独占锁);
2. 采用适当的同步机制以提高可伸缩性。
全部评论 (0)


