Java子執行緒結束後返回資訊給主執行緒(安卓中使用雲資料庫返回資料)

2020-09-20 11:00:07

專案需求:安卓要求連線雲資料庫必須重開一個子執行緒,於是涉及到子執行緒中查詢資料的返回。
程式碼:

private void findCourse() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            MySQLUtil mySQLUtil = new MySQLUtil();
            mySQLUtil.getConnection("cce-18");
            course = mySQLUtil.getCourseName("course_info_2018_2019");
        }
    });
    thread.start();
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

  在findCourse中,我們新開了一個子執行緒,其中course是我們需要返回的資料。如果我們正常執行會發現:在我們需要使用course時它還是一個null,因為主執行緒同時也在進行,子執行緒還沒執行到對course初始化這句話時,我們就在使用course了,因此我們必須等子執行緒執行結束course有值之後才繼續執行主執行緒。有兩個解決辦法:

  1. sleep函數。這種方法不推薦,因為我們並不知道子執行緒什麼時候結束,延時太久的話是對資源的一種浪費。
  2. join()函數。join()是等待呼叫此方法的執行緒結束。