Java:三级用户并发
Java: Concurrency with three level users
如何实现服务 (class),其中有三个级别的用户(线程)以不同的优先级访问它?
- 线程lv1:优先于所有线程;当他们使用该服务时,不允许其他用户
- 线程 lv2:优先于 lv3
- 线程 lv3:普通用户
理想情况下,
- main() : 启动线程
- service() : 协调对某些数据的访问
- 用户:请求访问数据,使用它,释放访问
有什么好的方法吗?
您可能可以使用三个 ReadWriteLock 来实现关卡独占,每个级别一个。
3 级用户将在 level3Lock
上使用读锁。
2 级用户将在 level3Lock
上使用写锁,在 level2Lock
上使用读锁 - 当 2 级用户正在处理时,3 级用户将无法访问数据。
Level-1 用户会延续传统,写锁 level-3 和 level-2 锁。
但是 - 这仅实现排他性。如果您真的想要优先级功能,您可以使用队列控制访问 - PriorityQueue 是一个显而易见的选择。正确设置 Executor
将处理来自该队列的任务。
如何实现服务 (class),其中有三个级别的用户(线程)以不同的优先级访问它?
- 线程lv1:优先于所有线程;当他们使用该服务时,不允许其他用户
- 线程 lv2:优先于 lv3
- 线程 lv3:普通用户
理想情况下,
- main() : 启动线程
- service() : 协调对某些数据的访问
- 用户:请求访问数据,使用它,释放访问
有什么好的方法吗?
您可能可以使用三个 ReadWriteLock 来实现关卡独占,每个级别一个。
3 级用户将在 level3Lock
上使用读锁。
2 级用户将在 level3Lock
上使用写锁,在 level2Lock
上使用读锁 - 当 2 级用户正在处理时,3 级用户将无法访问数据。
Level-1 用户会延续传统,写锁 level-3 和 level-2 锁。
但是 - 这仅实现排他性。如果您真的想要优先级功能,您可以使用队列控制访问 - PriorityQueue 是一个显而易见的选择。正确设置 Executor
将处理来自该队列的任务。