Я изменил свой источник, как упомянул claesv.
Я публикую свой результирующий код, чтобы показать, как этот метод Thread.join упростил мою задачу.
Надеюсь, кому-то поможет.
private void uploadingDone(){
if( isItemUploaded && isListUploaded && isStoreUploaded){
uploadingDone = true;
//<BLOCK1>
//TODO move to next screen
}else{
Log.i(TAG, "uploadingDone: Failed");
showFailureAlert();
}
}
// These flags are used to VALIDADTION success of uploading process. No need if you no need validation to move screen.
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");
}
}
private class ItemUpload extends Thread{
@Override
public void run() {
Log.i(TAG, "ItemUpload Thread started");
isItemUploaded = true;
}
}
private class StoreUpload extends Thread{
@Override
public void run() {
Log.i(TAG, "StoreUpload Thread started");
isStoreUploaded = true;
}
}
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();
//Here comes the final block to execute after all threads finished
uploadingDone();
}
ПРИМЕЧАНИЕ: не помещайте thread.join () после немедленного thread.start ()
Учтите это:
t1.start();
t2.start();
t3.start();
t4.start();
t1.join();
t2.join();
t3.join();
t4.join();