How to know if other threads have finished?

前端 未结 12 1698
野性不改
野性不改 2020-11-22 14:05

I have an object with a method named StartDownload(), that starts three threads.

How do I get a notification when each thread has finished executing?

12条回答
  •  粉色の甜心
    2020-11-22 14:41

    Here's a solution that is simple, short, easy to understand, and works perfectly for me. I needed to draw to the screen when another thread ends; but couldn't because the main thread has control of the screen. So:

    (1) I created the global variable: boolean end1 = false; The thread sets it to true when ending. That is picked up in the mainthread by "postDelayed" loop, where it is responded to.

    (2) My thread contains:

    void myThread() {
        end1 = false;
        new CountDownTimer(((60000, 1000) { // milliseconds for onFinish, onTick
            public void onFinish()
            {
                // do stuff here once at end of time.
                end1 = true; // signal that the thread has ended.
            }
            public void onTick(long millisUntilFinished)
            {
              // do stuff here repeatedly.
            }
        }.start();
    
    }
    

    (3) Fortunately, "postDelayed" runs in the main thread, so that's where in check the other thread once each second. When the other thread ends, this can begin whatever we want to do next.

    Handler h1 = new Handler();
    
    private void checkThread() {
       h1.postDelayed(new Runnable() {
          public void run() {
             if (end1)
                // resond to the second thread ending here.
             else
                h1.postDelayed(this, 1000);
          }
       }, 1000);
    }
    

    (4) Finally, start the whole thing running somewhere in your code by calling:

    void startThread()
    {
       myThread();
       checkThread();
    }
    

提交回复
热议问题