我正在制作一个带有 reading tasks
和 writing tasks
的 android 应用。
我想获得以下行为:
- 任务在队列中执行
- 阅读任务可以同时进行。
- 写任务非常重要,不能同时运行,如果正在运行一个写任务就不能运行其他任何类型的任务
我正在搜索可以解决此问题的库。 我可以解决这个信号量问题,但我害怕在 android 中解决这些问题。 以我有限的 android 经验,我知道管理这些东西的生命周期非常困难。正确执行写作任务非常重要。
对不起我的英语。谢谢
最佳答案
使用 fixed thread pool executor对于你的任务,让你所有的任务使用相同的ReadWriteLock
,让它自己解决。一般示例:
public class ReadTask implements Runnable {
private final ReadWriteLock lock;
public ReadTask (ReadWriteLock lock) {
this.lock = lock;
}
@Override public void run () {
lock.readLock().lock();
// do stuff
lock.readLock().unlock();
}
}
public class WriteTask implements Runnable {
private final ReadWriteLock lock;
public WriteTask (ReadWriteLock lock) {
this.lock = lock;
}
@Override public void run () {
lock.writeLock().lock();
// do stuff
lock.writeLock().unlock();
}
}
然后,设置您的初始执行器并锁定:
ExecutorService executor = Executors.newFixedThreadPool(NUMBER_OF_THREADS);
ReadWriteLock lock = new ReentrantReadWriteLock();
当你想对任务进行排队时:
// a write task:
executor.execute(new WriteTask(lock));
// a read task:
executor.execute(new ReadTask(lock));
只要确保你总是打开锁;如果需要,您可以使用 try ... finally
block ,但实际上因为 run()
不应该抛出任何异常,所以如果您处理run()
中的一切都如您所愿。
关于java - Android 中的读写器任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218936/