gpt4 book ai didi

java - Android 中的读写器任务队列

转载 作者:行者123 更新时间:2023-11-30 01:02:57 25 4
gpt4 key购买 nike

我正在制作一个带有 reading taskswriting 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com