线程在使用中的一点点心得

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

第一版优化思路:

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

第二版思路

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

重新整理第二版思路

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

最后总结:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值