【发布时间】:2011-10-29 00:59:19
【问题描述】:
我正在编写一个实现队列接口的自定义队列。此实现是线程安全的,并且在某些情况下会阻塞。
普通的队列接口没有提到异常,因此我不能在我的实现中抛出任何InterruptedException。
我看到了这个问题的两种解决方案,但它们都不是很令人满意:
移除队列接口并抛出异常。这使得代码无法用于需要队列的外国软件。
抛出
RuntimeException,这将产生大量令人惊讶的软件活动,我不想冒险。
不知何故,像ArrayBlockingQueue 这样的实现设法实现了Queue 和BlockingQueue。这是要走的路吗,或者这里有什么诀窍?
【问题讨论】:
-
如果您的代码需要抛出异常,那么您必须使用
RuntimeException。如果没有,那么您将不得不从异常中恢复并重试或其他方式。我在这里看不到任何简单的答案。在InterruptedException的情况下,我通常只是做一个Thread.currentThread().interrupt()然后退出线程。 -
您特别关注哪些方法?
-
出于好奇,您介意分享您的用例吗,其中没有一个现有的并发集合适合您?
-
我正在编写一个 BoundedBlockingQueue 以任何类型的队列作为参数。我只找到了一个 scala 实现,所以我正在编写一个 java 实现。我特别想提供一个在运行时更改边界的功能。
-
供将来参考:
ArrayBlockingQueue始终是有界的,但容量不能在运行时更改。类似地,LinkedBlockingQueue可能是有界的,但仍然不允许更改容量。我的直觉告诉我LinkedBlockingQueue将是修改以获得所需行为的良好候选者。
标签: java multithreading concurrency queue blockingqueue