Java多线程控制的心得
2023-02-18 16:39:16 时间
近期我刚刚完成了一个信息采集的Java项目,其中采集环节是以多线程的方式来运行的。开发时在多线程的控制方面遇到了不少的麻烦,主要是线程同步问题和线程的状态管理,我就这两方面简单谈谈自己的心得。
在Java中,经常会出现多个线程同时对同一资源进行操作,比如同时改变同一个变量,例如线程A刚刚将变量值改为1,紧接着线程B又将变量值改为2,这时线程A继续下面的程序时如果需要用的这个变量,就会出现错误。
因此我们需要让一个线程操作资源时其他线程进行等待,这就需要用到锁的概念,Java中提供了synchronized这个方法让线程对资源操作时进行同步。synchronized具体的用法可以上网搜索一下,相关的技术文章很多很多。这里就不详细举例了。
在我的项目中,还遇到了另外一个问题,就是线程尚未结束,主进程就已经结束了,由于主进程过早结束造成数据库连接被销毁,导致线程无法正常操作数据库而报错。我的解决方案是先构建一个线程池,线程池中记录活动的线程数量,在主进程最后结束前,做一个while循环判断线程池中的活动线程数量,当活动线程为0时,再退出while循环并且结束主进程。
线程池的实现方法简要来说就是每创建一个新的线程,就将线程池中的活动线程数量+1,当线程结束时,通过线程回调,将线程池中的活动线程数量再-1。
相关文章
- 记一次synchronized锁字符串引发的坑兼再谈Java字符串
- Java对List分割及使用Spring多线程调用
- Java接口幂等性
- Java 相同类型强制转换异常
- 和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)
- 有了这个开源 Java 项目,开发出炫酷的小游戏好像不难?
- 超级好用的 Java 数据可视化库:Tablesaw
- 采用开源Zabbix+500块硬件平替5万块动环检测系统,实现UPS、温湿度、烟雾等数据采集、存储、告警、大屏展示
- 驱动开发:WinDBG 常用调试命令总结
- 中小企业快速合规,快速部署开源堡垒机TELEPORT
- 驱动开发:监控进程与线程对象操作
- 客快物流大数据项目(九十六):ClickHouse的VersionedCollapsingMergeTree深入了解
- 软件测试|selenium屏幕操作事件TouchActions
- FPS游戏:视场角矩阵的特点
- Path Finder for Mac(强大的文件管理工具)v2149中文激活版
- 零售行业R公司对接亚马逊Amazon Device EDI项目案例
- FPS 游戏:快速寻找基址的方法
- 7min到40s:SpringBoot启动优化实践
- 客快物流大数据项目(九十九):Clickhouse中update/delete的使用
- 手把手教你使用CNN进行交通标志识别(已开源)