reader-Android 中的编写器任务队列

reader-writer task-queue in Android

我正在用 reading taskswriting tasks 制作一个 android 应用程序。 我想获得以下行为:

我正在搜索可以解决此问题的库。 我可以解决这个信号量问题,但我害怕在 android 中解决这些问题。 根据我对 android 的有限经验,我知道管理这些东西的生命周期非常困难。而且写任务正确执行很重要

对不起我的英语。谢谢

使用 fixed thread pool executor for your tasks, let all your tasks use the same 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 块,但实际上,由于 run() 不应抛出任何异常,如果您在 run() 内正确处理所有内容,则不应 运行 陷入问题如你所愿。