线程异步转同步

学习笔记,仅供自己参考,如有不对欢迎指正

5.T1、T2、T3三个线程,如何保证它们顺序执行?也就是异步转同步的方式。

  • 使用wait和notify方法
    wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。
    notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,notifyAll()是唤醒所有的线程。

  • 使用CountDownLatch
    具体实现:

package com.zhboy.myapplication;

import android.util.Log;
import java.util.Random;
import java.util.concurrent.CountDownLatch;

/**
 * @author zhou_hao
 * @date 2020/12/25
 * @description: 异步转同步的方式
 */
public class AsyncQuery {

    private static final String LOGGER_NAME = AsyncQuery.class.getName();

    public void asyncQuery() {
        final CountDownLatch latch = new CountDownLatch(1);

        new Thread(() -> {
            int room = new Random().nextInt(10);
            try {
                Thread.sleep(room * 100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.d(LOGGER_NAME, "子线程" + Thread.currentThread().getName() + "执行完毕");
            latch.countDown();
        }).start();

        try {
            latch.await();//等待
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

测试:

  Log.d("AsyncQuery", "执行查询")
        for (i in 0..10){
            val asyncQuery = AsyncQuery()
            asyncQuery.asyncQuery()
        }
        Log.d("AsyncQuery", "查询结束-执行主线程")

结果:

image.png

你可能感兴趣的:(线程异步转同步)