class Bunny::Concurrent::LinkedContinuationQueue
Continuation queue implementation for JRuby
.
On JRuby
, we’d rather use reliable and heavily battle tested j.u.c. primitives with well described semantics than informally specified, clumsy and limited Ruby standard library parts.
This is an implementation of the continuation queue on top of the linked blocking queue in j.u.c.
Compared to the Ruby standard library Queue
, there is one limitation: you cannot push a nil on the queue, it will fail with a null pointer exception. @private
Public Class Methods
new(*args, &block)
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 25 def initialize(*args, &block) @q = LinkedBlockingQueue.new end
Public Instance Methods
clear()
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 52 def clear @q.clear end
method_missing(selector, *args, &block)
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 56 def method_missing(selector, *args, &block) @q.__send__(selector, *args, &block) end
poll(timeout_in_ms = nil)
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 42 def poll(timeout_in_ms = nil) if timeout_in_ms v = @q.poll(timeout_in_ms, TimeUnit::MILLISECONDS) raise ::Timeout::Error.new("operation did not finish in #{timeout_in_ms} ms") if v.nil? v else @q.poll end end
pop()
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 38 def pop @q.take end
push(el, timeout_in_ms = nil)
click to toggle source
# File lib/bunny/concurrent/linked_continuation_queue.rb, line 29 def push(el, timeout_in_ms = nil) if timeout_in_ms @q.offer(el, timeout_in_ms, TimeUnit::MILLISECONDS) else @q.offer(el) end end
Also aliased as: <<