Sha256: 8f25a06d7a272d04a67b6320599a01431ec1cedcbe5c3a9ce7da3c8d7246e915
Contents?: true
Size: 1.41 KB
Versions: 2
Compression:
Stored size: 1.41 KB
Contents
if !defined?(JRUBY_VERSION) raise "Bunny::Concurrent::LinkedContinuationQueue can only be used on JRuby!" end require "java" java_import java.util.concurrent.LinkedBlockingQueue java_import java.util.concurrent.TimeUnit module Bunny module Concurrent # 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. class LinkedContinuationQueue def initialize(*args, &block) @q = LinkedBlockingQueue.new end 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 alias << push def pop @q.take end def poll(timeout_in_ms = nil) if timeout_in_ms @q.poll(timeout_in_ms, TimeUnit.MILLISECONDS) else @q.poll end end def clear @q.clear end def method_missing(selector, *args, &block) @q.__send__(selector, *args, &block) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
bunny-0.9.0.pre10 | lib/bunny/concurrent/linked_continuation_queue.rb |
bunny-0.9.0.pre9 | lib/bunny/concurrent/linked_continuation_queue.rb |