为什么Looper.quitSafely()没有退出循环?

如下代码。我的预期是在调用Looper.myLooper().quitSafely()后,仍然能处理消息3,然后退出循环,走到loop end那里。
但是,quitSafely实际结果并没有退出循环,而是一直卡住,并不会走到next。是什么原因呢? 谢谢。

        ThreadUtils.getCpuPool().execute(() ->
        {
            Looper.prepare();
            Log.i("loop", "prepare time: " + System.currentTimeMillis());
            Handler handler = new Handler(Looper.myLooper(), msg ->
            {
                System.out.println(msg.what);
                return true;
            });
            // message 1
            handler.sendEmptyMessage(1);
            // message 2
            handler.post(() ->
            {
                try
                {
                    Log.i("loop", "first run.");
                    Thread.sleep(1000);
                    // Looper.myLooper().quit(); // 立即退出loop循环, 符合预期
                    Looper.myLooper().quitSafely(); // 没有退出循环,似乎阻塞了,无法理解
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            });
            // message 3
            handler.sendEmptyMessage(3);
            Looper.loop();
            // loop end.
            Log.i("loop", "end time: " + System.currentTimeMillis());
        });
        Thread.sleep(10000);  // Junit测试,主线程sleep以让上面的子线程能完成任务