线程化:共享资源特殊情况

时间:2017-04-13 14:20:18

标签: java multithreading rabbitmq

我有一种可以由两种类型的任务使用的特定资源:同时由许多不同线程运行的正常任务和单个线程很少运行的特殊任务。

我的目标是:

  1. 除非特殊任务正在运行,否则所有正常任务都应该能够正常访问此资源。
  2. 特殊任务也应该等到这个资源空闲(来自任何可能正在运行的正常任务)。
  3. 如果特殊任务未运行,则正常任务应该能够同时使用此资源(它是线程安全的)。
  4. 确切地说,我有一个Rabbit-MQ队列,该资源可以访问该队列以弹出消息。任何调用我的webservice的用户都可以同时使用此资源(弹出消息)。但是,我有一个特殊的功能,它清除队列并用来自DB的消息重新填充它。

    我的挑战是仅针对此特殊任务锁定对象,但同时允许正常任务同时使用它。

1 个答案:

答案 0 :(得分:2)

你的目标听起来完全像ReadWriteLock的用例,它只允许一个作者,但如果没有作家,则任意读者。特殊任务可以进行写锁定,所有其他任务都可以进行读锁定。