按顺序执行新线程

Executing new threads in order

让我简化我的例子。假设我有两个按钮。

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'.

因为我无法从Main/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();
});

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

我考虑过将 ExecutorService 与 Executors.newFixedThreadPool(1) 一起使用,但我不确定这是否会 运行 工作线程按顺序。此外,数据库修改命令是从不同的 Activities/Service 调用的,因此我应该将 ExecutorService 设为静态。我担心如果我将 ExecutorService 设为静态而不调用 'shutdown()',那么可能会导致内存泄漏。

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

感觉好像有一个简单的方法可以做到,但我想不通。 :(

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