线程在使用中的一点点心得
创始人
2025-05-29 21:41:52

前面写的一个小功能,上传文件到服务器,结束上传时由于要销毁线程,又是由于等待时间偶尔过长会造成主界面卡顿问题,想着优化一下,采用线程复用的思路

第一版优化思路:

1、拿到所有需要上传的文件信息后,按并发数创建文件读取线程【读取完成变量】,读取到的数据块保留在线程中
2、上传类从线程中获取对应的文件块,并上传对应的文件块
3、文件读取完成后。如果还有读取任务,接受新的任务【1.会造成未上传完的文件块丢失,导致上传失败 2.读取完成变量被置为false,导致上传失败】
4、如果没有读取任务,关闭线程【同样,3中的问题更加凸出,而且由于线程已销毁,获取时还有很大可能导致程序崩溃】

第二版思路

1、拿到所有需要上传的文件信息后,按并发数创建文件读取线程【读取完成变量】,读取到的数据块保留在线程中
2、上传类,将保存数据块的容器地址传给读取线程,将读取到的文件块直接给上传类
3、文件读取完成后。如果还有读取任务,接受新的任务
4、如果没有读取任务,关闭线程【由于线程已销毁,读取完成变量变为垃圾值,导致再次上传时判断为读取失败,导致上传失败】

重新整理第二版思路

1、拿到所有需要上传的文件信息后,按并发数创建文件读取线程
2、上传类,将保存数据块的容器地址传给读取线程,将读取到的文件块直接给上传类
3、文件读取完成后。判断文件是否读取完毕,当前上传文件是否上传完成,如果没有上传完成不接新的任务,如果上传完成,判断是否还有读取任务,接受新的任务
4、如果没有读取任务,关闭线程

最后总结:

1、线程复用时,数据一定不要存放在线程中,任务委托类自己存放,避免接受新任务或销毁线程时导致的无法获取到数据。
2、线程复用并判断是否可以接受新任务时,一定要考虑任务委托类中是否有和线程类中的状态判断,如果有一定要当相关判断脱钩后再接取新任务。

相关内容

热门资讯

中路股份跌0.51%,成交额3... 12月17日,中路股份跌0.51%,成交额3182.96万元,换手率1.39%,总市值31.12亿元...
耀皮玻璃跌1.85%,成交额8... 12月17日,耀皮玻璃跌1.85%,成交额8037.35万元,换手率1.36%,总市值74.51亿元...
*ST张股跌0.65%,成交额... 12月17日,*ST张股跌0.65%,成交额4365.53万元,换手率1.71%,总市值31.13亿...
ST晨鸣跌1.86%,成交额5... 12月17日,ST晨鸣跌1.86%,成交额5011.67万元,换手率1.41%,总市值62.06亿元...
涪陵电力跌0.84%,成交额1... 12月17日,涪陵电力跌0.84%,成交额1.37亿元,换手率0.95%,总市值144.28亿元。异...