
我想在所有三个线程完成后执行方法uploadingDone().
这些标志在大多数情况下都是正确的.在极少数情况下,所有三个设置为true的标志和BLOCK1将执行两次.这三个线程对不同的数据执行不同的任务(不能进行并发修改).
我可以使用线程上的任何本机函数消除这些标志吗?
所有三个线程都将并行运行(强制要求).
BLOCK1应该仅被调用一次.
private synchronized voID uploadingDone(){ if( isItemUploaded && isListUploaded && isstoreUploaded){ uploadingDone = true; //<BLOCK1> //Todo move to next screen }else{ Log.i(TAG, "uploadingDone: Failed"); }}private boolean isListUploaded = false, isItemUploaded = false, isstoreUploaded = false, uploadingDone = false;private class ListUpload extends Thread{ @OverrIDe public voID run() { isListUploaded = true; Log.i(TAG, "ListUpload Thread started"); if(!uploadingDone) uploadingDone(); }}private class ItemUpload extends Thread{ @OverrIDe public voID run() { Log.i(TAG, "ItemUpload Thread started"); isItemUploaded = true; if(!uploadingDone) uploadingDone(); }}private class StoreUpload extends Thread{ @OverrIDe public voID run() { Log.i(TAG, "StoreUpload Thread started"); isstoreUploaded = true; if(!uploadingDone) uploadingDone(); }}private ListUpload ListUpload;private StoreUpload storeUpload;private ItemUpload itemUpload;public voID startUpload(){ ListUpload = new ListUpload(); ListUpload.start(); storeUpload = new StoreUpload(); storeUpload.start(); itemUpload = new ItemUpload(); itemUpload.start();}谢谢.
解决方法:
跳过标志并添加
ListUpload.join();storeUpload.join();itemUpload.join();// <BLOCK1>在startUpload()的末尾.每次对join()的调用都会导致调用线程阻塞,直到给定线程完成.
总结以上是内存溢出为你收集整理的java-Android线程并发运行线程之间进行通知全部内容,希望文章能够帮你解决java-Android线程并发运行线程之间进行通知所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)