Java工程师必知:并发工具、线程池与数据库事务的陷阱
需积分: 5 83 浏览量
更新于2024-06-19
收藏 1.78MB PDF 举报
"Java高手笔记-工程师必须知道的事"
在Java编程中,理解并掌握关键知识点是成为高手的关键。以下是一些重要的话题,涵盖了并发工具、加锁代码、线程池、连接池、HTTP调用、数据库事务、数据库索引、判等问题以及数值计算和集合类的使用。
1. 并发工具:
- ThreadLocal:在Web环境中,不正确使用ThreadLocal可能导致数据错乱,因为它为每个线程提供单独的变量副本。
- ConcurrentHashMap:虽然它是线程安全的,但如果使用不当,如未正确处理并发操作,仍可能出现线程安全问题。同时,应充分利用其并发性优势,避免无谓的同步。
- CopyOnWriteArrayList:在高并发但修改较少的场景下使用,可以避免大量复制,但在修改频繁的情况下可能导致性能下降。
2. 加锁代码:
- 确保清楚地知道需要保护的数据和代码段,否则可能导致锁无效,线程安全问题依然存在。
- 考虑锁的粒度,粗粒度锁可能导致不必要的阻塞,而细粒度锁可提高并发性能。
- 注意锁的场景,例如死锁问题,可以通过工具如VisualVM进行检测和避免。
3. 线程池:
- 使用Executors创建线程池可能导致内存溢出(OOM),尤其是固定线程池和缓存线程池的不当使用。
- 自定义线程池时要考虑线程管理策略,比如如何更好地处理拒绝策略,如CallerRunsPolicy可能会导致主线程执行任务,影响性能。
- 不复用线程池会导致频繁创建销毁线程,增加系统开销,而混用线程池可能导致任务调度混乱。
4. 连接池:
- 客户端SDK API通常有同步、异步和基于回调的三种形式,了解这些可以帮助优化并发性能。
- Jedis在多线程环境中的线程安全问题需要通过正确管理和同步来避免。
5. HTTP调用:
- 连接超时和读取超时的设置要合理,避免误解导致异常处理或性能问题。
- Spring Cloud Feign和Ribbon的超时配置需谨慎,防止异常处理不当。
- Apache HttpClient对并发连接数有限制,需要配置以适应高并发需求。
6. 数据库事务:
- Spring声明式事务的配置错误可能导致事务失效,注意事务边界和异常处理。
- 事务回滚规则,即使事务生效,某些情况下也可能无法回滚,比如数据库的隔离级别设置。
- 无异常并不意味着事务一定会提交,需理解事务提交的条件。
7. 数据库索引:
- 聚簇索引影响数据物理存储,理解其对查询速度的影响。
- 二级索引(非聚簇索引)维护、空间占用和回表代价都是设计索引时需要考虑的因素。
- 建立的索引未被查询优化器使用的情况,可能是因为SQL语句优化或索引选择不当。
8. 判等问题:
- 对象判等不应仅依赖`==`,而是应该使用`equals`方法,注意`equals`和`hashCode`的一致性。
- 实现`equals`时要遵循约定,防止出现意外行为,Lombok的`@EqualsAndHashCode`使用时要留意潜在问题。
9. 数值计算:
- 浮点数运算使用`double`可能导致精度问题,应使用`BigDecimal`进行精确计算。
- `BigDecimal`的比较和格式化操作需谨慎,尤其是与`equals`的使用。
- 防止数值溢出,尤其是在整数类型转换时,可以使用`BigInteger`或检查溢出条件。
10. 集合类:
- 使用集合类时,特别是`HashSet`,要避免直接使用不可变对象或不支持`equals`和`hashCode`的对象,可能导致预期外的行为。
- 对于数值计算和集合操作,要特别关注可能的异常和性能影响。
这些知识点涵盖了Java开发中的许多常见问题和最佳实践,理解和掌握它们能够帮助提升代码质量,减少错误,并优化应用性能。
点击了解资源详情
点击了解资源详情
点击了解资源详情
刘彦青-Yannis
- 粉丝: 1w+
- 资源: 30
最新资源
- Candle-Apps:在全球多个LED上运行的OOH交互式应用程序的Candle Apps Dashboard。 使用Laravel和VueJS构建
- vue3 初学,用 vue3 + vite + vue-route 写的一个练手项目.zip
- dspic30f4011-uart2-INT-ok.rar_单片机开发_C/C++_
- MERN_twitter
- react-memory-card-game
- cuid24:没有'c'前缀且长度为24个字符的cuid
- imdb actor age reader-crx插件
- 秋色园QBlog 3.0
- 参考资料-26年成本核算模板表.zip
- 仅限pmh:自述文件:)
- p20420387-10205-MSWIN-x86-64
- RSA.zip_加密解密_HTML_
- ts node项目,cheerio node项目.zip
- matlab转换java代码-rgb2map:在Matlab中将RGB颜色转换为索引的颜色图颜色
- Cart:一个基于Vue3.0的移动端购物H5
- tsunhua.github.io:欢迎访问我的博客「一叶扁舟」