java-Android线程并发运行线程之间进行通知
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Android线程并发运行线程之间进行通知,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1560字,纯文字阅读大概需要3分钟。
内容图文
![java-Android线程并发运行线程之间进行通知](/upload/InfoBanner/zyjiaocheng/674/c7ddc52c01714a17801015dfb2faeea5.jpg)
我想在所有三个线程完成后执行方法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线程并发运行线程之间进行通知所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。