預處理線程問題解決方案

問題描述:

       現有3個線程thread1, thread2, thread3。這3個線程是併發執行的,當着3個線程都執行完成以後,需要執行一個finish()事件。

 

實現方法:

複製代碼

 1 /** 定義一個靜態標記 **/ 2 private static byte nbTemp = 0; 3  4 private void aa(){ 5     // 線程1 6     Thread thread1 = new Thread(new Runnable() { 7         @Override 8         public void run() { 9             // ...10             bb();11         }12     });13     // 線程214     Thread thread2 = new Thread(new Runnable() {15         @Override16         public void run() {17             // ...18             bb();19         }20     });21     // 線程322     Thread thread3 = new Thread(new Runnable() {23         @Override24         public void run() {25             // ...26             bb();27         }28     });29 30     thread1.start();31     thread2.start();32     thread3.start();33 }34 35 /** 注意:要添加關鍵字“synchronized”,否則會先同時操作bb()方法 */36 private synchronized void bb(){37     nbTemp ++;38     if(nbTemp == (byte)3) {39         finish(); // 條件達成,執行finish();40     }41 }

複製代碼

 

我們回到APP上,在APP啓動時,我們會先啓動Splash,會在Splash中做一些預加載。那麼由於網速等等原因,導致預加載的時間不太固定。那麼我們既不希望他加載的過快,會導致頁面的存在感不強;也不希望加加載過慢,誤以爲“卡死”。那麼我們就需要設置一個最小加載時間和最大加載時間。那麼如何時間呢?

複製代碼

     nbTemp = 0                       Thread thread1 =  Thread(                                     Thread thread2 =  Thread(                                     Thread thread3 =  Thread(                                                                                                                                                                                                                       nbTemp ++                                                                     finish();   }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章