reader-Android 中的编写器任务队列
reader-writer task-queue in Android
我正在用 reading tasks
和 writing 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()
内正确处理所有内容,则不应 运行 陷入问题如你所愿。
我正在用 reading tasks
和 writing 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()
内正确处理所有内容,则不应 运行 陷入问题如你所愿。