按顺序执行新线程



让我简化我的例子。想象一下,我有两个按钮。

btn_A.setOnClickListener(v -> {
                // update ROOM DB value to A
            });
btn_B.setOnClickListener(v -> {
                // update ROOM DB value to B
            });

按钮 A 会将 DB 值设置为"A"。
按钮 B 会将 DB 值设置为"B"。

由于我无法从主/UI 线程访问数据库,因此我从新线程执行它:

btn_A.setOnClickListener(v -> {
    new Thread(() -> {
        // update ROOM DB value to A
    }).start();
});
btn_B.setOnClickListener(v -> {
    new Thread(() -> {
        // update ROOM DB value to B
    }).start();
});

如果我按下按钮A,B,A,B...,那么我担心新线程不会连续(按顺序(执行。

我考虑过将 ExecutorService 与 Executors.newFixedThreadPool(1( 一起使用,但我不确定这是否会按顺序运行工作线程。此外,DB修改推荐是从不同的活动/服务调用的,所以我应该使执行器服务成为静态的。我担心如果我将执行器服务设为静态并且不调用"shutdown((",那么可能会导致内存泄漏。

我想避免使用队列逻辑实现我自己的生产者/使用者设计模式。

感觉有一个简单的方法可以做到这一点,但我无法弄清楚。 :(

您需要在单个线程上运行所有更新。一种方法是使用 LooperHandler 将消息发送到数据库更新线程,并按接收顺序执行这些消息。在更高级别,可以使用 Otto 等事件总线库来帮助促进这种线程间通信。

相关内容

  • 没有找到相关文章

最新更新