【发布时间】: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