Thread.join不起作用

时间:2018-02-24 16:13:59

标签: java android multithreading thread-synchronization

我想执行以下线程,并等待它们完成以继续工作,但是,这不是通过我的代码实现的,我不知道为什么,我想连接应该强制当前线程等待为所有线程完成! 如果有人能帮助我,我会很高兴的!

这是我的代码:

ArrayList<Thread> retrievalThreads=new ArrayList<Thread>();

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getProfilePictures(false);
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getNumVotesThisWeek();
        }
    }));

    retrievalThreads.add( new Thread(new Runnable() {
        @Override
        public void run() {
            getTotalVotes(true);
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getTotalMatches();
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getUserActivityLevel();
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getUserMatchMakerLevel();
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getLastBoostTimeStamp(true);
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getLastStealTimeStamp(true);
        }
    }));

    retrievalThreads.add(new Thread(new Runnable() {
        @Override
        public void run() {
            getFacebookFriends();
        }
    }));

    //Start all above threads
    for (int i=0;i<retrievalThreads.size();i++)
        retrievalThreads.get(i).start();

    //Wait for them to finish
    for (int i=0;i<retrievalThreads.size();i++){
        try {
            retrievalThreads.get(i).join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    Log.i("Finished","TheAbove");

日志控制台中的打印在线程完成执行之前完成!

1 个答案:

答案 0 :(得分:1)

Thread.join()将只等待创建volley reuqest的线程,而不是所有线程。 Volley将产生其他线程以异步方式发送请求。您需要synchronous volley requests

相关问题