第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

多文件同時上傳!上傳進度條實時更新!多線程安全!

標簽:
Java Android

前几天写了一篇关于asyncTask实现多线程任务的手记,其中涉及到三个泛型和4个步骤,不知道大家还记得不。由于asyncTask 是异步的所以当我们要完成多文件上传时,需要创建多个线程,但是如果线程过多的话我们使用asyncTask会觉得非常的麻烦,相比之下我们如果使用线程池的话就相对简单的多。
线程池实现的方式如下:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); //创建线程池对象,需要最大线程数量 fixedThreadPool.execute(new Runnable);//执行的一个Runnable对象。可以实现Runnable 接口,重写Run方法,并做自己想要做的事情,比如文件上传

这样我们非常容易实现多个文件同时上传。但是一般我们实现多任务上传的时候由于用户体验的需要,我们一般会通过进度条实现上传进度的实时更新,并且对上传完成的任务从列表中删除。这里我使用的文件上传是电信的一个sdk,调用接口并且会给我们任务开始,完成,以及进度实时更新的回调。


所以我们只要在进度回调方法中做我们额进度更新操作即可。即进度更新通知我们的任务列表对象,对相应的任务进行更新操作;任务完成通知我们的任务列表对象,对相应的任务进行移除操作。所以此时问题来了,既然是多线程那么每一个任务进度更新,或者任务移除时间都是随机的,所以我们不能确定移除的操作是否会在进度准备更新的那一瞬间,此时操控的对象都是任务列表这个对象,但是由于存在对任务列表的移除,所以列表的长度是在变化的,所以很容易出现数组越界,或者更新任务位置错乱的现象。所以我们可以说这个任务列表对象是一个非线程安全的。此时多线程任务的时候我们就需要用到一个关键字(Synchinized)线程同步。对操控对象的方法使用线程锁。这样就能达到安全的目的。看起来是并发,然而并非真的并发。


其实有一种更为简单的方法就是所有操作任务列表的操作都放在handler中,因为handler就是一个线程安全的类。即在回调中唯一要做的就是把回调的参数通过handler传递给主线程。这样也可以实现我们的效果。

點擊查看更多內容
6人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消