【问题标题】:Executing new threads in order按顺序执行新线程
【发布时间】:2018-03-08 20:48:29
【问题描述】:

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

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 线程访问 DB,我从新线程执行它:

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) 一起使用,但我不确定这是否会按顺序运行工作线程。数据库修改命令也是从不同的活动/服务中调用的,所以我应该使 ExecutorService 静态。我担心如果我将 ExecutorService 设为静态并且不调用“shutdown()”,那么可能会导致内存泄漏。

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

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

【问题讨论】:

    标签: android multithreading executorservice


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多