java - 线程: Shared Resource special situation

标签 java multithreading rabbitmq

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

我的目标是:

  1. 除非特殊任务正在运行,否则所有普通任务都应该能够正常访问此资源。
  2. 特殊任务还应等待该资源释放(从任何可能正在运行的普通任务中释放)。
  3. 如果特殊任务未运行,普通任务应该能够同时使用此资源(它是线程安全的)。
<小时/>

准确地说,我有一个 Rabbit-MQ 队列,该资源可以访问该队列来弹出消息。任何调用我的网络服务的用户都可以同时使用此资源(弹出消息)。但是,我有一个特殊的函数可以清除队列并用来自数据库的消息重新填充它。

我的挑战是仅锁定与此特殊任务相关的对象,但同时允许普通任务同时使用它。

最佳答案

您的目标听起来与 ReadWriteLock 的用例完全相同,它只允许一个作者,但如果没有作者,则允许任意读者。特殊任务可以获取写锁,所有其他任务可以获取读锁。

关于java - 线程: Shared Resource special situation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394777/

相关文章:

java - 当 UI 线程等待 AsyncTask 时应用程序崩溃

rabbitmq - cluster_formation.classic_config.nodes 不适用于rabbitmq

c# - 返回一个新对象与修改作为参数传入的对象

java - 如何对没有返回值但写入 System.out 的方法进行单元测试

java - MySQL 从表中删除或更新表列以将其标记为已删除?

java - 如何从新线程中取出变量?

c# - 多线程后台 worker 设计

java - RabbitListener 多队列行为

rabbitmq - 当rabbitmq-server 崩溃时,rabbitmq 服务器会恢复标记为持久队列的消息吗?

java - 生产中的 Liferay 设置