面试题:怎样获取当前线程是否是主线程 (字节跳动)

372 阅读1分钟

我的解法

  • 获取主线程的Lopper
  • 获取当前线程的Lopper
  • 比较这两个线程Looper 是否相等?

获取Looper 并比较

private void testLoop() {
    Looper mainLooper = Looper.getMainLooper();
    Looper queue = Looper.myLooper();
    System.out.println(" is Main Thread :" + (mainLooper == queue));
}

开辟子线程

class TestLoopThread implements Runnable {
    @Override
    public void run() {
        testLoop();
    }
}

在Activity中调用的onCeate() 使用

testLoop();
new Thread(new TestLoopThread()).start();

运行结果

  • 看图

Screen Shot 2022-02-07 at 20.21.38.png 备注: 也可以获取线程名称来做比较;

  • 看图

Screen Shot 2022-02-07 at 20.31.10.png

  • 那个主线程,那个是子线程,一目了然....

android 自己的实现

  • 在类 DefaultTaskExecutor中有个函数,我们可以拿来直接用
@Override
public boolean isMainThread() {
    return Looper.getMainLooper().getThread() == Thread.currentThread();
}