温馨提示×

android countdownlatch的实现细节是啥

小樊
83
2024-11-22 17:13:52
栏目: 编程语言

CountDownLatch是Java并发包中的一个同步辅助类,它允许一个或多个线程等待直到一组操作完成

实现细节:

  1. CountDownLatch的构造函数接受一个整数参数,表示需要等待的操作数。
  2. 初始化时,内部计数器被设置为传入的参数值。
  3. 当调用CountDownLatch的await()方法时,当前线程会被阻塞,直到计数器减为0。
  4. 当调用CountDownLatch的countDown()方法时,计数器会减1。如果计数器已经为0,那么调用await()方法的线程会立即返回。
  5. 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或执行其他操作。

0