Class: Concurrent::RubyFixedThreadPool
- Inherits:
-
RubyThreadPoolExecutor
- Object
- RubyThreadPoolExecutor
- Concurrent::RubyFixedThreadPool
- Defined in:
- lib/concurrent/executor/ruby_fixed_thread_pool.rb
Overview
When running on the JVM (JRuby) this class will inherit from ‘JavaFixedThreadPool`. On all other platforms it will inherit from `RubyFixedThreadPool`.
A thread pool with a set number of threads. The number of threads in the pool is set on construction and remains constant. When all threads are busy new tasks ‘#post` to the thread pool are enqueued until a thread becomes available. Should a thread crash for any reason the thread will immediately be removed from the pool and replaced.
The API and behavior of this class are based on Java’s ‘FixedThreadPool`
Direct Known Subclasses
Constant Summary
Constants inherited from RubyThreadPoolExecutor
Concurrent::RubyThreadPoolExecutor::DEFAULT_MAX_POOL_SIZE, Concurrent::RubyThreadPoolExecutor::DEFAULT_MAX_QUEUE_SIZE, Concurrent::RubyThreadPoolExecutor::DEFAULT_MIN_POOL_SIZE, Concurrent::RubyThreadPoolExecutor::DEFAULT_THREAD_IDLETIMEOUT, Concurrent::RubyThreadPoolExecutor::OVERFLOW_POLICIES
Instance Attribute Summary
Attributes inherited from RubyThreadPoolExecutor
#completed_task_count, #idletime, #largest_length, #max_length, #max_queue, #min_length, #overflow_policy, #scheduled_task_count
Instance Method Summary collapse
-
#initialize(num_threads, opts = {}) ⇒ RubyFixedThreadPool
constructor
Create a new thread pool.
Methods inherited from RubyThreadPoolExecutor
#can_overflow?, #length, #queue_length, #remaining_capacity, #status
Methods included from RubyExecutor
#<<, #kill, #post, #running?, #shutdown, #shutdown?, #shuttingdown?, #wait_for_termination
Methods included from Logging
Methods included from Executor
Constructor Details
#initialize(num_threads, opts = {}) ⇒ RubyFixedThreadPool
Create a new thread pool.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/concurrent/executor/ruby_fixed_thread_pool.rb', line 16 def initialize(num_threads, opts = {}) overflow_policy = opts.fetch(:overflow_policy, :abort) raise ArgumentError.new('number of threads must be greater than zero') if num_threads < 1 raise ArgumentError.new("#{overflow_policy} is not a valid overflow policy") unless OVERFLOW_POLICIES.include?(overflow_policy) opts = opts.merge( min_threads: num_threads, max_threads: num_threads, num_threads: overflow_policy, max_queue: DEFAULT_MAX_QUEUE_SIZE, idletime: 0 ) super(opts) end |