CountDownLatch是Java并发包中的一个同步辅助类,它允许一个或多个线程等待直到一组操作完成
实现细节:
- CountDownLatch的构造函数接受一个整数参数,表示需要等待的操作数。
- 初始化时,内部计数器被设置为传入的参数值。
- 当调用CountDownLatch的await()方法时,当前线程会被阻塞,直到计数器减为0。
- 当调用CountDownLatch的countDown()方法时,计数器会减1。如果计数器已经为0,那么调用await()方法的线程会立即返回。
- CountDownLatch是不可重用的,一旦计数器减为0,它就不能再次使用。
以下是一个简单的Android中使用CountDownLatch的示例:
import android.os.Bundle; import android.os.CountDownLatch; import android.os.Handler; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private CountDownLatch mLatch; private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLatch = new CountDownLatch(1); // 设置需要等待的操作数为1 mHandler = new Handler(); // 启动一个新线程,模拟耗时操作 new Thread(new Runnable() { @Override public void run() { try { // 模拟耗时操作,例如从网络获取数据 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // 耗时操作完成后,调用countDown()方法 mLatch.countDown(); } }).start(); // 在主线程中调用await()方法,等待耗时操作完成 try { mLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } // 耗时操作完成后,执行相关操作 mHandler.post(new Runnable() { @Override public void run() { // 更新UI或执行其他操作 } }); } }
在这个示例中,我们创建了一个CountDownLatch实例,并设置需要等待的操作数为1。然后在一个新线程中执行耗时操作,操作完成后调用countDown()方法。在主线程中调用await()方法等待耗时操作完成。当耗时操作完成后,我们使用Handler更新UI或执行其他操作。