Sha256: c3f9db85a13adbcc99149eb3f3b60a2713d18353bd5cf5dc78c81d781788530d
Contents?: true
Size: 1.53 KB
Versions: 3
Compression:
Stored size: 1.53 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 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 def clear @q.clear end def method_missing(selector, *args, &block) @q.__send__(selector, *args, &block) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems