美文网首页
ThreadLocal和Loop的联动

ThreadLocal和Loop的联动

作者: GoLearning轻松学 | 来源:发表于2022-02-10 09:54 被阅读0次

ThreadLocal和Loop的联动,保证了线程的隔离

ThreadLocal 可以把一个对象保存在指定的线程中,对象保存后,只能在指定线程中获取保存的数据,对于其他线程来说则无法获取到数据。
日常开发中 ThreadLocal 使用的地方比较少,但是系统在 Handler 机制中使用了它来保证每一个 Handler 所在的线程中都有一个独立的 Looper 对象,为了更好的理解 Handler 机制
其实就是这个变量的作用域是线程,其他线程访问不了。通常我们创建的变量是可以被任何一个线程访问的,而使用 ThreadLocal 创建的变量只能被当前线程访问,其他线程无法访问。

image.png
public final class Looper {
  static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
......
    private static void prepare(boolean quitAllowed) {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper(quitAllowed));
    }
}

这里通过prepare保障了sThreadLocal和Looper的唯一绑定。

    public static void loop() {
        final Looper me = myLooper();
        if (me == null) {
            throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
        }
        final MessageQueue queue = me.mQueue;
     ........
}

这里保证一个线程只能返回跟它唯一绑定的Looper,保证了MessageQueue的唯一。

相关文章

  • ThreadLocal和Loop的联动

    ThreadLocal和Loop的联动,保证了线程的隔离 ThreadLocal 可以把一个对象保存在指定的线程中...

  • 彻底理解Handler机制

    关键知识点 Handler MessageQueue ThreadLocal Loop ActivityThrea...

  • Handler

    一个线程如何保证只有一个Loop? tip(什么是threadlocal? 是一块线程的内部的存储类,可以指定线程...

  • 1分钟了解 JavaScript EventLoop

    Event Loop Event Loop 是一个程序结构,用于等待和发送消息和事件。 Event Loop 执行...

  • 线程基础、线程之间的共享与协作(2)

    ThreadLocal辨析 与Synchonized的比较 ThreadLocal 和 Synchonized 都...

  • ThreadLocal

    ThreadLocal辨析 与Synchonized的比较 ThreadLocal和Synchonized都用于解...

  • 汇编(七)

    Loop指令 loop指令和cx寄存器配合使用,用于循环操作类似高级语言的for,while 使用格式 loop指...

  • 汇编五

    Loop指令 loop指令和cx寄存器配合使用,用于循环操作类似高级语言的for,while使用格式 loop指令...

  • 汇编(七)

    Loop指令 loop指令和cx寄存器配合使用,用于循环操作类似高级语言的for,while 使用格式 loop指...

  • iOS之底层汇编(七)

    Loop指令 loop指令和cx寄存器配合使用,用于循环操作类似高级语言的for、while 使用格式 loop指...

网友评论

      本文标题:ThreadLocal和Loop的联动

      本文链接:https://www.haomeiwen.com/subject/ftxbhrtx.html