# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `concurrent-ruby` gem.
# Please instead update this file by running `bin/tapioca gem concurrent-ruby`.

# typed: true

module Concurrent
  extend ::Concurrent::Utility::EngineDetector
  extend ::Concurrent::Utility::NativeExtensionLoader
  extend ::Logger::Severity
  extend ::Concurrent::Concern::Logging
  extend ::Concurrent::Concern::Deprecation

  private

  def abort_transaction; end
  def atomically; end
  def call_dataflow(method, executor, *inputs, &block); end
  def dataflow(*inputs, &block); end
  def dataflow!(*inputs, &block); end
  def dataflow_with(executor, *inputs, &block); end
  def dataflow_with!(executor, *inputs, &block); end
  def leave_transaction; end
  def monotonic_time; end

  class << self
    def abort_transaction; end
    def atomically; end
    def call_dataflow(method, executor, *inputs, &block); end
    def create_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
    def create_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
    def dataflow(*inputs, &block); end
    def dataflow!(*inputs, &block); end
    def dataflow_with(executor, *inputs, &block); end
    def dataflow_with!(executor, *inputs, &block); end
    def disable_at_exit_handlers!; end
    def executor(executor_identifier); end
    def global_fast_executor; end
    def global_immediate_executor; end
    def global_io_executor; end
    def global_logger; end
    def global_logger=(value); end
    def global_timer_set; end
    def leave_transaction; end
    def monotonic_time; end
    def new_fast_executor(opts = T.unsafe(nil)); end
    def new_io_executor(opts = T.unsafe(nil)); end
    def physical_processor_count; end
    def processor_count; end
    def processor_counter; end
    def use_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
    def use_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
  end
end

class Concurrent::AbstractExchanger < ::Concurrent::Synchronization::Object
  def initialize; end

  def exchange(value, timeout = T.unsafe(nil)); end
  def exchange!(value, timeout = T.unsafe(nil)); end
  def try_exchange(value, timeout = T.unsafe(nil)); end

  private

  def do_exchange(value, timeout); end
end

Concurrent::AbstractExchanger::CANCEL = T.let(T.unsafe(nil), Object)

class Concurrent::AbstractExecutorService < ::Concurrent::Synchronization::LockableObject
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging
  include ::Concurrent::ExecutorService
  include ::Concurrent::Concern::Deprecation

  def initialize(opts = T.unsafe(nil), &block); end

  def auto_terminate=(value); end
  def auto_terminate?; end
  def fallback_policy; end
  def kill; end
  def name; end
  def running?; end
  def shutdown; end
  def shutdown?; end
  def shuttingdown?; end
  def to_s; end
  def wait_for_termination(timeout = T.unsafe(nil)); end

  private

  def handle_fallback(*args); end
  def ns_auto_terminate?; end
  def ns_execute(*args, &task); end
  def ns_kill_execution; end
  def ns_shutdown_execution; end
end

Concurrent::AbstractExecutorService::FALLBACK_POLICIES = T.let(T.unsafe(nil), Array)

class Concurrent::AbstractThreadLocalVar
  def initialize(default = T.unsafe(nil), &default_block); end

  def bind(value, &block); end
  def value; end
  def value=(value); end

  protected

  def allocate_storage; end
  def default; end
end

class Concurrent::Agent < ::Concurrent::Synchronization::LockableObject
  include ::Concurrent::Concern::Observable

  def initialize(initial, opts = T.unsafe(nil)); end

  def <<(action); end
  def await; end
  def await_for(timeout); end
  def await_for!(timeout); end
  def deref; end
  def error; end
  def error_mode; end
  def failed?; end
  def post(*args, &action); end
  def reason; end
  def restart(new_value, opts = T.unsafe(nil)); end
  def send(*args, &action); end
  def send!(*args, &action); end
  def send_off(*args, &action); end
  def send_off!(*args, &action); end
  def send_via(executor, *args, &action); end
  def send_via!(executor, *args, &action); end
  def stopped?; end
  def value; end
  def wait(timeout = T.unsafe(nil)); end

  private

  def enqueue_action_job(action, args, executor); end
  def enqueue_await_job(latch); end
  def execute_next_job; end
  def handle_error(error); end
  def ns_enqueue_job(job, index = T.unsafe(nil)); end
  def ns_find_last_job_for_thread; end
  def ns_initialize(initial, opts); end
  def ns_post_next_job; end
  def ns_validate(value); end

  class << self
    def await(*agents); end
    def await_for(timeout, *agents); end
    def await_for!(timeout, *agents); end
  end
end

Concurrent::Agent::AWAIT_ACTION = T.let(T.unsafe(nil), Proc)
Concurrent::Agent::AWAIT_FLAG = T.let(T.unsafe(nil), Object)
Concurrent::Agent::DEFAULT_ERROR_HANDLER = T.let(T.unsafe(nil), Proc)
Concurrent::Agent::DEFAULT_VALIDATOR = T.let(T.unsafe(nil), Proc)
Concurrent::Agent::ERROR_MODES = T.let(T.unsafe(nil), Array)

class Concurrent::Agent::Error < ::StandardError
  def initialize(message = T.unsafe(nil)); end
end

class Concurrent::Agent::Job < ::Struct
  def action; end
  def action=(_); end
  def args; end
  def args=(_); end
  def caller; end
  def caller=(_); end
  def executor; end
  def executor=(_); end

  class << self
    def [](*_arg0); end
    def inspect; end
    def members; end
    def new(*_arg0); end
  end
end

class Concurrent::Agent::ValidationError < ::Concurrent::Agent::Error
  def initialize(message = T.unsafe(nil)); end
end

class Concurrent::Array < ::Array; end
Concurrent::ArrayImplementation = Array

module Concurrent::Async
  mixes_in_class_methods ::Concurrent::Async::ClassMethods

  def async; end
  def await; end
  def call; end
  def cast; end
  def init_synchronization; end

  class << self
    def included(base); end
    def validate_argc(obj, method, *args); end
  end
end

class Concurrent::Async::AsyncDelegator < ::Concurrent::Synchronization::LockableObject
  def initialize(delegate); end

  def method_missing(method, *args, &block); end
  def perform; end
  def reset_if_forked; end

  private

  def respond_to_missing?(method, include_private = T.unsafe(nil)); end
end

class Concurrent::Async::AwaitDelegator
  def initialize(delegate); end

  def method_missing(method, *args, &block); end

  private

  def respond_to_missing?(method, include_private = T.unsafe(nil)); end
end

module Concurrent::Async::ClassMethods
  def new(*args, &block); end
end

class Concurrent::Atom < ::Concurrent::Synchronization::Object
  include ::Concurrent::Concern::Observable

  def initialize(value, opts = T.unsafe(nil)); end

  def __initialize_atomic_fields__; end
  def compare_and_set(old_value, new_value); end
  def deref; end
  def reset(new_value); end
  def swap(*args); end
  def value; end

  private

  def compare_and_set_value(expected, value); end
  def swap_value(value); end
  def update_value(&block); end
  def valid?(new_value); end
  def value=(value); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::AtomicBoolean < ::Concurrent::MutexAtomicBoolean
  def inspect; end
  def to_s; end
end

Concurrent::AtomicBooleanImplementation = Concurrent::MutexAtomicBoolean

module Concurrent::AtomicDirectUpdate
  def try_update; end
  def try_update!; end
  def update; end
end

class Concurrent::AtomicFixnum < ::Concurrent::MutexAtomicFixnum
  def inspect; end
  def to_s; end
end

Concurrent::AtomicFixnumImplementation = Concurrent::MutexAtomicFixnum

class Concurrent::AtomicMarkableReference < ::Concurrent::Synchronization::Object
  def initialize(value = T.unsafe(nil), mark = T.unsafe(nil)); end

  def __initialize_atomic_fields__; end
  def compare_and_set(expected_val, new_val, expected_mark, new_mark); end
  def compare_and_swap(expected_val, new_val, expected_mark, new_mark); end
  def get; end
  def mark; end
  def marked?; end
  def set(new_val, new_mark); end
  def try_update; end
  def try_update!; end
  def update; end
  def value; end

  private

  def compare_and_set_reference(expected, value); end
  def immutable_array(*args); end
  def reference; end
  def reference=(value); end
  def swap_reference(value); end
  def update_reference(&block); end

  class << self
    def new(*args, &block); end
  end
end

module Concurrent::AtomicNumericCompareAndSetWrapper
  def compare_and_set(old_value, new_value); end
end

class Concurrent::AtomicReference < ::Concurrent::MutexAtomicReference
  def inspect; end
  def to_s; end
end

Concurrent::AtomicReferenceImplementation = Concurrent::MutexAtomicReference

class Concurrent::CRubySet < ::Set
  def initialize(*args, &block); end

  def &(*args); end
  def +(*args); end
  def -(*args); end
  def <(*args); end
  def <<(*args); end
  def <=(*args); end
  def ==(*args); end
  def ===(*args); end
  def >(*args); end
  def >=(*args); end
  def ^(*args); end
  def add(*args); end
  def add?(*args); end
  def classify(*args); end
  def clear(*args); end
  def collect!(*args); end
  def compare_by_identity(*args); end
  def compare_by_identity?(*args); end
  def delete(*args); end
  def delete?(*args); end
  def delete_if(*args); end
  def difference(*args); end
  def disjoint?(*args); end
  def divide(*args); end
  def each(*args); end
  def empty?(*args); end
  def eql?(*args); end
  def filter!(*args); end
  def flatten(*args); end
  def flatten!(*args); end
  def flatten_merge(*args); end
  def freeze(*args); end
  def hash(*args); end
  def include?(*args); end
  def inspect(*args); end
  def intersect?(*args); end
  def intersection(*args); end
  def keep_if(*args); end
  def length(*args); end
  def map!(*args); end
  def member?(*args); end
  def merge(*args); end
  def pretty_print(*args); end
  def pretty_print_cycle(*args); end
  def proper_subset?(*args); end
  def proper_superset?(*args); end
  def reject!(*args); end
  def replace(*args); end
  def reset(*args); end
  def select!(*args); end
  def size(*args); end
  def subset?(*args); end
  def subtract(*args); end
  def superset?(*args); end
  def taint(*args); end
  def to_a(*args); end
  def to_s(*args); end
  def to_set(*args); end
  def union(*args); end
  def untaint(*args); end
  def |(*args); end

  private

  def initialize_copy(other); end
end

class Concurrent::CachedThreadPool < ::Concurrent::ThreadPoolExecutor
  def initialize(opts = T.unsafe(nil)); end

  private

  def ns_initialize(opts); end
end

class Concurrent::CancelledOperationError < ::Concurrent::Error; end
module Concurrent::Collection; end

class Concurrent::Collection::CopyOnNotifyObserverSet < ::Concurrent::Synchronization::LockableObject
  def initialize; end

  def add_observer(observer = T.unsafe(nil), func = T.unsafe(nil), &block); end
  def count_observers; end
  def delete_observer(observer); end
  def delete_observers; end
  def notify_and_delete_observers(*args, &block); end
  def notify_observers(*args, &block); end

  protected

  def ns_initialize; end

  private

  def duplicate_and_clear_observers; end
  def duplicate_observers; end
  def notify_to(observers, *args); end
end

class Concurrent::Collection::CopyOnWriteObserverSet < ::Concurrent::Synchronization::LockableObject
  def initialize; end

  def add_observer(observer = T.unsafe(nil), func = T.unsafe(nil), &block); end
  def count_observers; end
  def delete_observer(observer); end
  def delete_observers; end
  def notify_and_delete_observers(*args, &block); end
  def notify_observers(*args, &block); end

  protected

  def ns_initialize; end

  private

  def clear_observers_and_return_old; end
  def notify_to(observers, *args); end
  def observers; end
  def observers=(new_set); end
end

Concurrent::Collection::MapImplementation = Concurrent::Collection::MriMapBackend

class Concurrent::Collection::MriMapBackend < ::Concurrent::Collection::NonConcurrentMapBackend
  def initialize(options = T.unsafe(nil)); end

  def []=(key, value); end
  def clear; end
  def compute(key); end
  def compute_if_absent(key); end
  def compute_if_present(key); end
  def delete(key); end
  def delete_pair(key, value); end
  def get_and_set(key, value); end
  def merge_pair(key, value); end
  def replace_if_exists(key, new_value); end
  def replace_pair(key, old_value, new_value); end
end

class Concurrent::Collection::NonConcurrentMapBackend
  def initialize(options = T.unsafe(nil)); end

  def [](key); end
  def []=(key, value); end
  def clear; end
  def compute(key); end
  def compute_if_absent(key); end
  def compute_if_present(key); end
  def delete(key); end
  def delete_pair(key, value); end
  def each_pair; end
  def get_and_set(key, value); end
  def get_or_default(key, default_value); end
  def key?(key); end
  def merge_pair(key, value); end
  def replace_if_exists(key, new_value); end
  def replace_pair(key, old_value, new_value); end
  def size; end

  private

  def _get(key); end
  def _set(key, value); end
  def dupped_backend; end
  def initialize_copy(other); end
  def pair?(key, expected_value); end
  def store_computed_value(key, new_value); end
end

class Concurrent::Collection::NonConcurrentPriorityQueue < ::Concurrent::Collection::RubyNonConcurrentPriorityQueue
  def <<(item); end
  def deq; end
  def enq(item); end
  def has_priority?(item); end
  def shift; end
  def size; end
end

Concurrent::Collection::NonConcurrentPriorityQueueImplementation = Concurrent::Collection::RubyNonConcurrentPriorityQueue

class Concurrent::Collection::RubyNonConcurrentPriorityQueue
  def initialize(opts = T.unsafe(nil)); end

  def <<(item); end
  def clear; end
  def delete(item); end
  def deq; end
  def empty?; end
  def enq(item); end
  def has_priority?(item); end
  def include?(item); end
  def length; end
  def peek; end
  def pop; end
  def push(item); end
  def shift; end
  def size; end

  private

  def ordered?(x, y); end
  def sink(k); end
  def swap(x, y); end
  def swim(k); end

  class << self
    def from_list(list, opts = T.unsafe(nil)); end
  end
end

module Concurrent::Concern; end

module Concurrent::Concern::Deprecation
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging
  extend ::Logger::Severity
  extend ::Concurrent::Concern::Logging
  extend ::Concurrent::Concern::Deprecation

  def deprecated(message, strip = T.unsafe(nil)); end
  def deprecated_method(old_name, new_name); end
end

module Concurrent::Concern::Dereferenceable
  def deref; end
  def value; end

  protected

  def apply_deref_options(value); end
  def ns_set_deref_options(opts); end
  def set_deref_options(opts = T.unsafe(nil)); end
  def value=(value); end
end

module Concurrent::Concern::Logging
  include ::Logger::Severity

  def log(level, progname, message = T.unsafe(nil), &block); end
end

module Concurrent::Concern::Obligation
  include ::Concurrent::Concern::Dereferenceable

  def complete?; end
  def exception(*args); end
  def fulfilled?; end
  def incomplete?; end
  def no_error!(timeout = T.unsafe(nil)); end
  def pending?; end
  def realized?; end
  def reason; end
  def rejected?; end
  def state; end
  def unscheduled?; end
  def value(timeout = T.unsafe(nil)); end
  def value!(timeout = T.unsafe(nil)); end
  def wait(timeout = T.unsafe(nil)); end
  def wait!(timeout = T.unsafe(nil)); end

  protected

  def compare_and_set_state(next_state, *expected_current); end
  def event; end
  def get_arguments_from(opts = T.unsafe(nil)); end
  def if_state(*expected_states); end
  def init_obligation; end
  def ns_check_state?(expected); end
  def ns_set_state(value); end
  def set_state(success, value, reason); end
  def state=(value); end
end

module Concurrent::Concern::Observable
  def add_observer(observer = T.unsafe(nil), func = T.unsafe(nil), &block); end
  def count_observers; end
  def delete_observer(observer); end
  def delete_observers; end
  def with_observer(observer = T.unsafe(nil), func = T.unsafe(nil), &block); end

  protected

  def observers; end
  def observers=(_arg0); end
end

class Concurrent::ConcurrentUpdateError < ::ThreadError; end
Concurrent::ConcurrentUpdateError::CONC_UP_ERR_BACKTRACE = T.let(T.unsafe(nil), Array)
class Concurrent::ConfigurationError < ::Concurrent::Error; end
class Concurrent::CountDownLatch < ::Concurrent::MutexCountDownLatch; end
Concurrent::CountDownLatchImplementation = Concurrent::MutexCountDownLatch

class Concurrent::CyclicBarrier < ::Concurrent::Synchronization::LockableObject
  def initialize(parties, &block); end

  def broken?; end
  def number_waiting; end
  def parties; end
  def reset; end
  def wait(timeout = T.unsafe(nil)); end

  protected

  def ns_generation_done(generation, status, continue = T.unsafe(nil)); end
  def ns_initialize(parties, &block); end
  def ns_next_generation; end
end

class Concurrent::CyclicBarrier::Generation < ::Struct
  def status; end
  def status=(_); end

  class << self
    def [](*_arg0); end
    def inspect; end
    def members; end
    def new(*_arg0); end
  end
end

class Concurrent::Delay < ::Concurrent::Synchronization::LockableObject
  include ::Concurrent::Concern::Dereferenceable
  include ::Concurrent::Concern::Obligation

  def initialize(opts = T.unsafe(nil), &block); end

  def reconfigure(&block); end
  def value(timeout = T.unsafe(nil)); end
  def value!(timeout = T.unsafe(nil)); end
  def wait(timeout = T.unsafe(nil)); end

  protected

  def ns_initialize(opts, &block); end

  private

  def execute_task_once; end
end

class Concurrent::DependencyCounter
  def initialize(count, &block); end

  def update(time, value, reason); end
end

class Concurrent::Error < ::StandardError; end

class Concurrent::Event < ::Concurrent::Synchronization::LockableObject
  def initialize; end

  def reset; end
  def set; end
  def set?; end
  def try?; end
  def wait(timeout = T.unsafe(nil)); end

  protected

  def ns_initialize; end
  def ns_set; end
end

class Concurrent::Exchanger < ::Concurrent::RubyExchanger; end
Concurrent::ExchangerImplementation = Concurrent::RubyExchanger

module Concurrent::ExecutorService
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging

  def <<(task); end
  def can_overflow?; end
  def post(*args, &task); end
  def serialized?; end
end

class Concurrent::FixedThreadPool < ::Concurrent::ThreadPoolExecutor
  def initialize(num_threads, opts = T.unsafe(nil)); end
end

class Concurrent::Future < ::Concurrent::IVar
  def initialize(opts = T.unsafe(nil), &block); end

  def cancel; end
  def cancelled?; end
  def execute; end
  def set(value = T.unsafe(nil), &block); end
  def wait_or_cancel(timeout); end

  protected

  def ns_initialize(value, opts); end

  class << self
    def execute(opts = T.unsafe(nil), &block); end
  end
end

Concurrent::GLOBAL_FAST_EXECUTOR = T.let(T.unsafe(nil), Concurrent::Delay)
Concurrent::GLOBAL_IMMEDIATE_EXECUTOR = T.let(T.unsafe(nil), Concurrent::ImmediateExecutor)
Concurrent::GLOBAL_IO_EXECUTOR = T.let(T.unsafe(nil), Concurrent::Delay)
Concurrent::GLOBAL_LOGGER = T.let(T.unsafe(nil), Concurrent::AtomicReference)
Concurrent::GLOBAL_MONOTONIC_CLOCK = T.let(T.unsafe(nil), T.untyped)
Concurrent::GLOBAL_TIMER_SET = T.let(T.unsafe(nil), Concurrent::Delay)
class Concurrent::Hash < ::Hash; end
Concurrent::HashImplementation = Hash

class Concurrent::IVar < ::Concurrent::Synchronization::LockableObject
  include ::Concurrent::Concern::Dereferenceable
  include ::Concurrent::Concern::Obligation
  include ::Concurrent::Concern::Observable

  def initialize(value = T.unsafe(nil), opts = T.unsafe(nil), &block); end

  def add_observer(observer = T.unsafe(nil), func = T.unsafe(nil), &block); end
  def fail(reason = T.unsafe(nil)); end
  def set(value = T.unsafe(nil)); end
  def try_set(value = T.unsafe(nil), &block); end

  protected

  def check_for_block_or_value!(block_given, value); end
  def complete(success, value, reason); end
  def complete_without_notification(success, value, reason); end
  def notify_observers(value, reason); end
  def ns_complete_without_notification(success, value, reason); end
  def ns_initialize(value, opts); end
  def safe_execute(task, args = T.unsafe(nil)); end
end

class Concurrent::IllegalOperationError < ::Concurrent::Error; end

class Concurrent::ImmediateExecutor < ::Concurrent::AbstractExecutorService
  include ::Concurrent::SerialExecutorService

  def initialize; end

  def <<(task); end
  def kill; end
  def post(*args, &task); end
  def running?; end
  def shutdown; end
  def shutdown?; end
  def shuttingdown?; end
  def wait_for_termination(timeout = T.unsafe(nil)); end
end

class Concurrent::ImmutabilityError < ::Concurrent::Error; end

module Concurrent::ImmutableStruct
  include ::Concurrent::Synchronization::AbstractStruct

  def ==(other); end
  def [](member); end
  def each(&block); end
  def each_pair(&block); end
  def inspect; end
  def merge(other, &block); end
  def select(&block); end
  def to_a; end
  def to_h; end
  def to_s; end
  def values; end
  def values_at(*indexes); end

  private

  def initialize_copy(original); end

  class << self
    def included(base); end
    def new(*args, &block); end
  end
end

Concurrent::ImmutableStruct::FACTORY = T.let(T.unsafe(nil), T.untyped)

class Concurrent::IndirectImmediateExecutor < ::Concurrent::ImmediateExecutor
  def initialize; end

  def post(*args, &task); end
end

class Concurrent::InitializationError < ::Concurrent::Error; end
class Concurrent::LifecycleError < ::Concurrent::Error; end

class Concurrent::LockFreeStack < ::Concurrent::Synchronization::Object
  include ::Enumerable

  def initialize(head = T.unsafe(nil)); end

  def __initialize_atomic_fields__; end
  def clear; end
  def clear_each(&block); end
  def clear_if(head); end
  def compare_and_clear(head); end
  def compare_and_pop(head); end
  def compare_and_push(head, value); end
  def each(head = T.unsafe(nil)); end
  def empty?(head = T.unsafe(nil)); end
  def inspect; end
  def peek; end
  def pop; end
  def push(value); end
  def replace_if(head, new_head); end
  def to_s; end

  private

  def compare_and_set_head(expected, value); end
  def head; end
  def head=(value); end
  def swap_head(value); end
  def update_head(&block); end

  class << self
    def new(*args, &block); end
    def of1(value); end
    def of2(value1, value2); end
  end
end

Concurrent::LockFreeStack::EMPTY = T.let(T.unsafe(nil), Concurrent::LockFreeStack::Node)

class Concurrent::LockFreeStack::Node
  def initialize(value, next_node); end

  def next_node; end
  def value; end
  def value=(_arg0); end

  class << self
    def [](*_arg0); end
  end
end

class Concurrent::MVar < ::Concurrent::Synchronization::Object
  include ::Concurrent::Concern::Dereferenceable

  def initialize(value = T.unsafe(nil), opts = T.unsafe(nil)); end

  def borrow(timeout = T.unsafe(nil)); end
  def empty?; end
  def full?; end
  def modify(timeout = T.unsafe(nil)); end
  def modify!; end
  def put(value, timeout = T.unsafe(nil)); end
  def set!(value); end
  def take(timeout = T.unsafe(nil)); end
  def try_put!(value); end
  def try_take!; end

  protected

  def synchronize(&block); end

  private

  def unlocked_empty?; end
  def unlocked_full?; end
  def wait_for_empty(timeout); end
  def wait_for_full(timeout); end
  def wait_while(condition, timeout); end

  class << self
    def new(*args, &block); end
  end
end

Concurrent::MVar::EMPTY = T.let(T.unsafe(nil), Object)
Concurrent::MVar::TIMEOUT = T.let(T.unsafe(nil), Object)

class Concurrent::Map < ::Concurrent::Collection::MriMapBackend
  def initialize(options = T.unsafe(nil), &block); end

  def [](key); end
  def []=(key, value); end
  def each; end
  def each_key; end
  def each_pair; end
  def each_value; end
  def empty?; end
  def fetch(key, default_value = T.unsafe(nil)); end
  def fetch_or_store(key, default_value = T.unsafe(nil)); end
  def get(key); end
  def inspect; end
  def key(value); end
  def keys; end
  def marshal_dump; end
  def marshal_load(hash); end
  def put(key, value); end
  def put_if_absent(key, value); end
  def value?(value); end
  def values; end

  private

  def initialize_copy(other); end
  def populate_from(hash); end
  def raise_fetch_no_key; end
  def validate_options_hash!(options); end
end

class Concurrent::MaxRestartFrequencyError < ::Concurrent::Error; end

class Concurrent::Maybe < ::Concurrent::Synchronization::Object
  include ::Comparable

  def initialize(just, nothing); end

  def <=>(other); end
  def fulfilled?; end
  def just; end
  def just?; end
  def nothing; end
  def nothing?; end
  def or(other); end
  def reason; end
  def rejected?; end
  def value; end

  class << self
    def from(*args); end
    def just(value); end
    def nothing(error = T.unsafe(nil)); end

    private

    def new(*args, &block); end
  end
end

Concurrent::Maybe::NONE = T.let(T.unsafe(nil), Object)

class Concurrent::MultipleAssignmentError < ::Concurrent::Error
  def initialize(message = T.unsafe(nil), inspection_data = T.unsafe(nil)); end

  def inspect; end
  def inspection_data; end
end

class Concurrent::MultipleErrors < ::Concurrent::Error
  def initialize(errors, message = T.unsafe(nil)); end

  def errors; end
end

module Concurrent::MutableStruct
  include ::Concurrent::Synchronization::AbstractStruct

  def ==(other); end
  def [](member); end
  def []=(member, value); end
  def each(&block); end
  def each_pair(&block); end
  def inspect; end
  def merge(other, &block); end
  def select(&block); end
  def to_a; end
  def to_h; end
  def to_s; end
  def values; end
  def values_at(*indexes); end

  private

  def initialize_copy(original); end

  class << self
    def new(*args, &block); end
  end
end

Concurrent::MutableStruct::FACTORY = T.let(T.unsafe(nil), T.untyped)

class Concurrent::MutexAtomicBoolean < ::Concurrent::Synchronization::LockableObject
  def initialize(initial = T.unsafe(nil)); end

  def false?; end
  def make_false; end
  def make_true; end
  def true?; end
  def value; end
  def value=(value); end

  protected

  def ns_initialize(initial); end

  private

  def ns_make_value(value); end
end

class Concurrent::MutexAtomicFixnum < ::Concurrent::Synchronization::LockableObject
  def initialize(initial = T.unsafe(nil)); end

  def compare_and_set(expect, update); end
  def decrement(delta = T.unsafe(nil)); end
  def down(delta = T.unsafe(nil)); end
  def increment(delta = T.unsafe(nil)); end
  def up(delta = T.unsafe(nil)); end
  def update; end
  def value; end
  def value=(value); end

  protected

  def ns_initialize(initial); end

  private

  def ns_set(value); end
end

class Concurrent::MutexAtomicReference < ::Concurrent::Synchronization::LockableObject
  include ::Concurrent::AtomicDirectUpdate
  include ::Concurrent::AtomicNumericCompareAndSetWrapper

  def initialize(value = T.unsafe(nil)); end

  def _compare_and_set(old_value, new_value); end
  def compare_and_swap(old_value, new_value); end
  def get; end
  def get_and_set(new_value); end
  def set(new_value); end
  def swap(new_value); end
  def value; end
  def value=(new_value); end

  protected

  def ns_initialize(value); end
end

class Concurrent::MutexCountDownLatch < ::Concurrent::Synchronization::LockableObject
  def initialize(count = T.unsafe(nil)); end

  def count; end
  def count_down; end
  def wait(timeout = T.unsafe(nil)); end

  protected

  def ns_initialize(count); end
end

class Concurrent::MutexSemaphore < ::Concurrent::Synchronization::LockableObject
  def initialize(count); end

  def acquire(permits = T.unsafe(nil)); end
  def available_permits; end
  def drain_permits; end
  def reduce_permits(reduction); end
  def release(permits = T.unsafe(nil)); end
  def try_acquire(permits = T.unsafe(nil), timeout = T.unsafe(nil)); end

  protected

  def ns_initialize(count); end

  private

  def try_acquire_now(permits); end
  def try_acquire_timed(permits, timeout); end
end

Concurrent::NULL = T.let(T.unsafe(nil), Object)
Concurrent::NULL_LOGGER = T.let(T.unsafe(nil), Proc)

module Concurrent::Options
  class << self
    def executor(executor_identifier); end
    def executor_from_options(opts = T.unsafe(nil)); end
  end
end

class Concurrent::Promise < ::Concurrent::IVar
  def initialize(opts = T.unsafe(nil), &block); end

  def catch(&block); end
  def execute; end
  def fail(reason = T.unsafe(nil)); end
  def flat_map(&block); end
  def on_error(&block); end
  def on_success(&block); end
  def rescue(&block); end
  def set(value = T.unsafe(nil), &block); end
  def then(*args, &block); end
  def zip(*others); end

  protected

  def complete(success, value, reason); end
  def notify_child(child); end
  def ns_initialize(value, opts); end
  def on_fulfill(result); end
  def on_reject(reason); end
  def realize(task); end
  def root?; end
  def set_pending; end
  def set_state!(success, value, reason); end
  def synchronized_set_state!(success, value, reason); end

  class << self
    def aggregate(method, *promises); end
    def all?(*promises); end
    def any?(*promises); end
    def execute(opts = T.unsafe(nil), &block); end
    def fulfill(value, opts = T.unsafe(nil)); end
    def reject(reason, opts = T.unsafe(nil)); end
    def zip(*promises); end
  end
end

class Concurrent::PromiseExecutionError < ::StandardError; end

module Concurrent::Promises
  extend ::Concurrent::Promises::FactoryMethods::Configuration
  extend ::Concurrent::Promises::FactoryMethods
end

class Concurrent::Promises::AbstractAnyPromise < ::Concurrent::Promises::BlockedPromise; end

class Concurrent::Promises::AbstractEventFuture < ::Concurrent::Synchronization::Object
  include ::Concurrent::Promises::InternalStates

  def initialize(promise, default_executor); end

  def __initialize_atomic_fields__; end
  def add_callback_clear_delayed_node(node); end
  def add_callback_notify_blocked(promise, index); end
  def blocks; end
  def callbacks; end
  def chain(*args, &task); end
  def chain_on(executor, *args, &task); end
  def chain_resolvable(resolvable); end
  def default_executor; end
  def inspect; end
  def internal_state; end
  def on_resolution(*args, &callback); end
  def on_resolution!(*args, &callback); end
  def on_resolution_using(executor, *args, &callback); end
  def pending?; end
  def promise; end
  def resolve_with(state, raise_on_reassign = T.unsafe(nil), reserved = T.unsafe(nil)); end
  def resolved?; end
  def state; end
  def tangle(resolvable); end
  def to_s; end
  def touch; end
  def touched?; end
  def wait(timeout = T.unsafe(nil)); end
  def waiting_threads; end
  def with_default_executor(executor); end
  def with_hidden_resolvable; end

  private

  def add_callback(method, *args); end
  def async_callback_on_resolution(state, executor, args, callback); end
  def call_callback(method, state, args); end
  def call_callbacks(state); end
  def callback_clear_delayed_node(state, node); end
  def callback_notify_blocked(state, promise, index); end
  def compare_and_set_internal_state(expected, value); end
  def internal_state=(value); end
  def swap_internal_state(value); end
  def update_internal_state(&block); end
  def wait_until_resolved(timeout); end
  def with_async(executor, *args, &block); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::Promises::AbstractFlatPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed_because, blockers_count, event_or_future); end

  def touch; end

  private

  def add_delayed_of(future); end
  def on_resolvable(resolved_future, index); end
  def resolvable?(countdown, future, index); end
  def touched?; end
end

class Concurrent::Promises::AbstractPromise < ::Concurrent::Synchronization::Object
  include ::Concurrent::Promises::InternalStates

  def initialize(future); end

  def default_executor; end
  def delayed_because; end
  def event; end
  def future; end
  def inspect; end
  def state; end
  def to_s; end
  def touch; end

  private

  def evaluate_to(*args, block); end
  def resolve_with(new_state, raise_on_reassign = T.unsafe(nil)); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::Promises::AnyFulfilledFuturePromise < ::Concurrent::Promises::AnyResolvedFuturePromise
  private

  def resolvable?(countdown, future, index); end
end

class Concurrent::Promises::AnyResolvedEventPromise < ::Concurrent::Promises::AbstractAnyPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
  def resolvable?(countdown, future, index); end
end

class Concurrent::Promises::AnyResolvedFuturePromise < ::Concurrent::Promises::AbstractAnyPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
  def resolvable?(countdown, future, index); end
end

class Concurrent::Promises::BlockedPromise < ::Concurrent::Promises::InnerPromise
  def initialize(delayed, blockers_count, future); end

  def blocked_by; end
  def delayed_because; end
  def on_blocker_resolution(future, index); end
  def touch; end

  private

  def clear_and_propagate_touch(stack_or_element = T.unsafe(nil)); end
  def on_resolvable(resolved_future, index); end
  def process_on_blocker_resolution(future, index); end
  def resolvable?(countdown, future, index); end

  class << self
    def add_delayed(delayed1, delayed2); end
    def new_blocked_by(blockers, *args, &block); end
    def new_blocked_by1(blocker, *args, &block); end
    def new_blocked_by2(blocker1, blocker2, *args, &block); end
  end
end

class Concurrent::Promises::BlockedTaskPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor, executor, args, &task); end

  def executor; end
end

class Concurrent::Promises::ChainPromise < ::Concurrent::Promises::BlockedTaskPromise
  private

  def on_resolvable(resolved_future, index); end
end

class Concurrent::Promises::DelayPromise < ::Concurrent::Promises::InnerPromise
  def initialize(default_executor); end

  def delayed_because; end
  def touch; end
end

class Concurrent::Promises::Event < ::Concurrent::Promises::AbstractEventFuture
  def &(other); end
  def any(event_or_future); end
  def delay; end
  def schedule(intended_time); end
  def then(*args, &task); end
  def to_event; end
  def to_future; end
  def with_default_executor(executor); end
  def zip(other); end
  def |(event_or_future); end

  private

  def callback_on_resolution(state, args, callback); end
  def rejected_resolution(raise_on_reassign, state); end
end

class Concurrent::Promises::EventWrapperPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
end

module Concurrent::Promises::FactoryMethods
  include ::Concurrent::Promises::FactoryMethods::Configuration
  extend ::Concurrent::ReInclude
  extend ::Concurrent::Promises::FactoryMethods
  extend ::Concurrent::Promises::FactoryMethods::Configuration

  def any(*futures_and_or_events); end
  def any_event(*futures_and_or_events); end
  def any_event_on(default_executor, *futures_and_or_events); end
  def any_fulfilled_future(*futures_and_or_events); end
  def any_fulfilled_future_on(default_executor, *futures_and_or_events); end
  def any_resolved_future(*futures_and_or_events); end
  def any_resolved_future_on(default_executor, *futures_and_or_events); end
  def delay(*args, &task); end
  def delay_on(default_executor, *args, &task); end
  def fulfilled_future(value, default_executor = T.unsafe(nil)); end
  def future(*args, &task); end
  def future_on(default_executor, *args, &task); end
  def make_future(argument = T.unsafe(nil), default_executor = T.unsafe(nil)); end
  def rejected_future(reason, default_executor = T.unsafe(nil)); end
  def resolvable_event; end
  def resolvable_event_on(default_executor = T.unsafe(nil)); end
  def resolvable_future; end
  def resolvable_future_on(default_executor = T.unsafe(nil)); end
  def resolved_event(default_executor = T.unsafe(nil)); end
  def resolved_future(fulfilled, value, reason, default_executor = T.unsafe(nil)); end
  def schedule(intended_time, *args, &task); end
  def schedule_on(default_executor, intended_time, *args, &task); end
  def zip(*futures_and_or_events); end
  def zip_events(*futures_and_or_events); end
  def zip_events_on(default_executor, *futures_and_or_events); end
  def zip_futures(*futures_and_or_events); end
  def zip_futures_on(default_executor, *futures_and_or_events); end
end

module Concurrent::Promises::FactoryMethods::Configuration
  def default_executor; end
end

class Concurrent::Promises::FlatEventPromise < ::Concurrent::Promises::AbstractFlatPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def process_on_blocker_resolution(future, index); end
end

class Concurrent::Promises::FlatFuturePromise < ::Concurrent::Promises::AbstractFlatPromise
  def initialize(delayed, blockers_count, levels, default_executor); end

  private

  def process_on_blocker_resolution(future, index); end
end

class Concurrent::Promises::Future < ::Concurrent::Promises::AbstractEventFuture
  def &(other); end
  def any(event_or_future); end
  def apply(args, block); end
  def delay; end
  def exception(*args); end
  def flat(level = T.unsafe(nil)); end
  def flat_event; end
  def flat_future(level = T.unsafe(nil)); end
  def fulfilled?; end
  def inspect; end
  def on_fulfillment(*args, &callback); end
  def on_fulfillment!(*args, &callback); end
  def on_fulfillment_using(executor, *args, &callback); end
  def on_rejection(*args, &callback); end
  def on_rejection!(*args, &callback); end
  def on_rejection_using(executor, *args, &callback); end
  def reason(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil)); end
  def rejected?; end
  def rescue(*args, &task); end
  def rescue_on(executor, *args, &task); end
  def result(timeout = T.unsafe(nil)); end
  def run(run_test = T.unsafe(nil)); end
  def schedule(intended_time); end
  def then(*args, &task); end
  def then_on(executor, *args, &task); end
  def to_event; end
  def to_future; end
  def to_s; end
  def value(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil)); end
  def value!(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil)); end
  def wait!(timeout = T.unsafe(nil)); end
  def with_default_executor(executor); end
  def zip(other); end
  def |(event_or_future); end

  private

  def async_callback_on_fulfillment(state, executor, args, callback); end
  def async_callback_on_rejection(state, executor, args, callback); end
  def callback_on_fulfillment(state, args, callback); end
  def callback_on_rejection(state, args, callback); end
  def callback_on_resolution(state, args, callback); end
  def rejected_resolution(raise_on_reassign, state); end
  def run_test(v); end
  def wait_until_resolved!(timeout = T.unsafe(nil)); end
end

class Concurrent::Promises::FutureWrapperPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
end

class Concurrent::Promises::ImmediateEventPromise < ::Concurrent::Promises::InnerPromise
  def initialize(default_executor); end
end

class Concurrent::Promises::ImmediateFuturePromise < ::Concurrent::Promises::InnerPromise
  def initialize(default_executor, fulfilled, value, reason); end
end

class Concurrent::Promises::InnerPromise < ::Concurrent::Promises::AbstractPromise; end
module Concurrent::Promises::InternalStates; end

class Concurrent::Promises::InternalStates::Fulfilled < ::Concurrent::Promises::InternalStates::ResolvedWithResult
  def initialize(value); end

  def apply(args, block); end
  def fulfilled?; end
  def reason; end
  def to_sym; end
  def value; end
end

class Concurrent::Promises::InternalStates::FulfilledArray < ::Concurrent::Promises::InternalStates::Fulfilled
  def apply(args, block); end
end

Concurrent::Promises::InternalStates::PENDING = T.let(T.unsafe(nil), Concurrent::Promises::InternalStates::Pending)

class Concurrent::Promises::InternalStates::PartiallyRejected < ::Concurrent::Promises::InternalStates::ResolvedWithResult
  def initialize(value, reason); end

  def apply(args, block); end
  def fulfilled?; end
  def reason; end
  def to_sym; end
  def value; end
end

class Concurrent::Promises::InternalStates::Pending < ::Concurrent::Promises::InternalStates::State
  def resolved?; end
  def to_sym; end
end

Concurrent::Promises::InternalStates::RESERVED = T.let(T.unsafe(nil), Concurrent::Promises::InternalStates::Reserved)
Concurrent::Promises::InternalStates::RESOLVED = T.let(T.unsafe(nil), Concurrent::Promises::InternalStates::Fulfilled)

class Concurrent::Promises::InternalStates::Rejected < ::Concurrent::Promises::InternalStates::ResolvedWithResult
  def initialize(reason); end

  def apply(args, block); end
  def fulfilled?; end
  def reason; end
  def to_sym; end
  def value; end
end

class Concurrent::Promises::InternalStates::Reserved < ::Concurrent::Promises::InternalStates::Pending; end

class Concurrent::Promises::InternalStates::ResolvedWithResult < ::Concurrent::Promises::InternalStates::State
  def apply; end
  def fulfilled?; end
  def reason; end
  def resolved?; end
  def result; end
  def to_sym; end
  def value; end
end

class Concurrent::Promises::InternalStates::State
  def resolved?; end
  def to_sym; end
end

class Concurrent::Promises::RescuePromise < ::Concurrent::Promises::BlockedTaskPromise
  def initialize(delayed, blockers_count, default_executor, executor, args, &task); end

  private

  def on_resolvable(resolved_future, index); end
end

module Concurrent::Promises::Resolvable
  include ::Concurrent::Promises::InternalStates
end

class Concurrent::Promises::ResolvableEvent < ::Concurrent::Promises::Event
  include ::Concurrent::Promises::Resolvable

  def resolve(raise_on_reassign = T.unsafe(nil), reserved = T.unsafe(nil)); end
  def wait(timeout = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def with_hidden_resolvable; end
end

class Concurrent::Promises::ResolvableEventPromise < ::Concurrent::Promises::AbstractPromise
  def initialize(default_executor); end
end

class Concurrent::Promises::ResolvableFuture < ::Concurrent::Promises::Future
  include ::Concurrent::Promises::Resolvable

  def evaluate_to(*args, &block); end
  def evaluate_to!(*args, &block); end
  def fulfill(value, raise_on_reassign = T.unsafe(nil), reserved = T.unsafe(nil)); end
  def reason(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def reject(reason, raise_on_reassign = T.unsafe(nil), reserved = T.unsafe(nil)); end
  def resolve(fulfilled = T.unsafe(nil), value = T.unsafe(nil), reason = T.unsafe(nil), raise_on_reassign = T.unsafe(nil), reserved = T.unsafe(nil)); end
  def result(timeout = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def value(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def value!(timeout = T.unsafe(nil), timeout_value = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def wait(timeout = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def wait!(timeout = T.unsafe(nil), resolve_on_timeout = T.unsafe(nil)); end
  def with_hidden_resolvable; end
end

class Concurrent::Promises::ResolvableFuturePromise < ::Concurrent::Promises::AbstractPromise
  def initialize(default_executor); end
end

class Concurrent::Promises::RunFuturePromise < ::Concurrent::Promises::AbstractFlatPromise
  def initialize(delayed, blockers_count, default_executor, run_test); end

  private

  def process_on_blocker_resolution(future, index); end
end

class Concurrent::Promises::ScheduledPromise < ::Concurrent::Promises::InnerPromise
  def initialize(default_executor, intended_time); end

  def inspect; end
  def intended_time; end
end

class Concurrent::Promises::ThenPromise < ::Concurrent::Promises::BlockedTaskPromise
  def initialize(delayed, blockers_count, default_executor, executor, args, &task); end

  private

  def on_resolvable(resolved_future, index); end
end

class Concurrent::Promises::ZipEventEventPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
end

class Concurrent::Promises::ZipEventsPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
end

class Concurrent::Promises::ZipFutureEventPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
  def process_on_blocker_resolution(future, index); end
end

class Concurrent::Promises::ZipFuturesPromise < ::Concurrent::Promises::BlockedPromise
  def initialize(delayed, blockers_count, default_executor); end

  private

  def on_resolvable(resolved_future, index); end
  def process_on_blocker_resolution(future, index); end
end

module Concurrent::ReInclude
  def extended(base); end
  def include(*modules); end
  def included(base); end
end

class Concurrent::ReadWriteLock < ::Concurrent::Synchronization::Object
  def initialize; end

  def acquire_read_lock; end
  def acquire_write_lock; end
  def has_waiters?; end
  def release_read_lock; end
  def release_write_lock; end
  def with_read_lock; end
  def with_write_lock; end
  def write_locked?; end

  private

  def max_readers?(c = T.unsafe(nil)); end
  def max_writers?(c = T.unsafe(nil)); end
  def running_readers(c = T.unsafe(nil)); end
  def running_readers?(c = T.unsafe(nil)); end
  def running_writer?(c = T.unsafe(nil)); end
  def waiting_writer?(c = T.unsafe(nil)); end
  def waiting_writers(c = T.unsafe(nil)); end

  class << self
    def new(*args, &block); end
  end
end

Concurrent::ReadWriteLock::MAX_READERS = T.let(T.unsafe(nil), Integer)
Concurrent::ReadWriteLock::MAX_WRITERS = T.let(T.unsafe(nil), Integer)
Concurrent::ReadWriteLock::RUNNING_WRITER = T.let(T.unsafe(nil), Integer)
Concurrent::ReadWriteLock::WAITING_WRITER = T.let(T.unsafe(nil), Integer)

class Concurrent::ReentrantReadWriteLock < ::Concurrent::Synchronization::Object
  def initialize; end

  def acquire_read_lock; end
  def acquire_write_lock; end
  def release_read_lock; end
  def release_write_lock; end
  def try_read_lock; end
  def try_write_lock; end
  def with_read_lock; end
  def with_write_lock; end

  private

  def max_readers?(c = T.unsafe(nil)); end
  def max_writers?(c = T.unsafe(nil)); end
  def running_readers(c = T.unsafe(nil)); end
  def running_readers?(c = T.unsafe(nil)); end
  def running_writer?(c = T.unsafe(nil)); end
  def waiting_or_running_writer?(c = T.unsafe(nil)); end
  def waiting_writers(c = T.unsafe(nil)); end

  class << self
    def new(*args, &block); end
  end
end

Concurrent::ReentrantReadWriteLock::MAX_READERS = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::MAX_WRITERS = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::READER_BITS = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::READ_LOCK_MASK = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::RUNNING_WRITER = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::WAITING_WRITER = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::WRITER_BITS = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::WRITE_LOCK_HELD = T.let(T.unsafe(nil), Integer)
Concurrent::ReentrantReadWriteLock::WRITE_LOCK_MASK = T.let(T.unsafe(nil), Integer)
class Concurrent::RejectedExecutionError < ::Concurrent::Error; end
class Concurrent::ResourceLimitError < ::Concurrent::Error; end

class Concurrent::RubyExchanger < ::Concurrent::AbstractExchanger
  def initialize; end

  def __initialize_atomic_fields__; end
  def compare_and_set_slot(expected, value); end
  def slot; end
  def slot=(value); end
  def swap_slot(value); end
  def update_slot(&block); end

  private

  def do_exchange(value, timeout); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::RubyExchanger::Node < ::Concurrent::Synchronization::Object
  def initialize(item); end

  def __initialize_atomic_fields__; end
  def compare_and_set_value(expected, value); end
  def item; end
  def latch; end
  def swap_value(value); end
  def update_value(&block); end
  def value; end
  def value=(value); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::RubyExecutorService < ::Concurrent::AbstractExecutorService
  def initialize(*args, &block); end

  def kill; end
  def post(*args, &task); end
  def shutdown; end
  def wait_for_termination(timeout = T.unsafe(nil)); end

  private

  def ns_running?; end
  def ns_shutdown?; end
  def ns_shutdown_execution; end
  def ns_shuttingdown?; end
  def stop_event; end
  def stopped_event; end
end

class Concurrent::RubySingleThreadExecutor < ::Concurrent::RubyThreadPoolExecutor
  def initialize(opts = T.unsafe(nil)); end
end

class Concurrent::RubyThreadLocalVar < ::Concurrent::AbstractThreadLocalVar
  def value; end
  def value=(value); end

  protected

  def allocate_storage; end

  private

  def get_default; end
  def get_threadlocal_array(thread = T.unsafe(nil)); end
  def next_index; end
  def set_threadlocal_array(array, thread = T.unsafe(nil)); end
  def value_for(thread); end

  class << self
    def semi_sync(&block); end
    def thread_finalizer(id); end
    def thread_local_finalizer(index); end
  end
end

Concurrent::RubyThreadLocalVar::FREE = T.let(T.unsafe(nil), Array)
Concurrent::RubyThreadLocalVar::LOCK = T.let(T.unsafe(nil), Thread::Mutex)
Concurrent::RubyThreadLocalVar::THREAD_LOCAL_ARRAYS = T.let(T.unsafe(nil), Hash)

class Concurrent::RubyThreadPoolExecutor < ::Concurrent::RubyExecutorService
  def initialize(opts = T.unsafe(nil)); end

  def can_overflow?; end
  def completed_task_count; end
  def idletime; end
  def largest_length; end
  def length; end
  def max_length; end
  def max_queue; end
  def min_length; end
  def queue_length; end
  def ready_worker(worker); end
  def remaining_capacity; end
  def remove_busy_worker(worker); end
  def scheduled_task_count; end
  def synchronous; end
  def worker_died(worker); end
  def worker_not_old_enough(worker); end
  def worker_task_completed; end

  private

  def ns_add_busy_worker; end
  def ns_assign_worker(*args, &task); end
  def ns_enqueue(*args, &task); end
  def ns_execute(*args, &task); end
  def ns_initialize(opts); end
  def ns_kill_execution; end
  def ns_limited_queue?; end
  def ns_prune_pool; end
  def ns_ready_worker(worker, success = T.unsafe(nil)); end
  def ns_remove_busy_worker(worker); end
  def ns_reset_if_forked; end
  def ns_shutdown_execution; end
  def ns_worker_died(worker); end
  def ns_worker_not_old_enough(worker); end
end

Concurrent::RubyThreadPoolExecutor::DEFAULT_MAX_POOL_SIZE = T.let(T.unsafe(nil), Integer)
Concurrent::RubyThreadPoolExecutor::DEFAULT_MAX_QUEUE_SIZE = T.let(T.unsafe(nil), Integer)
Concurrent::RubyThreadPoolExecutor::DEFAULT_MIN_POOL_SIZE = T.let(T.unsafe(nil), Integer)
Concurrent::RubyThreadPoolExecutor::DEFAULT_THREAD_IDLETIMEOUT = T.let(T.unsafe(nil), Integer)

class Concurrent::RubyThreadPoolExecutor::Worker
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging

  def initialize(pool, id); end

  def <<(message); end
  def kill; end
  def stop; end

  private

  def create_worker(queue, pool, idletime); end
  def run_task(pool, task, args); end
end

class Concurrent::SafeTaskExecutor < ::Concurrent::Synchronization::LockableObject
  def initialize(task, opts = T.unsafe(nil)); end

  def execute(*args); end
end

class Concurrent::ScheduledTask < ::Concurrent::IVar
  include ::Comparable

  def initialize(delay, opts = T.unsafe(nil), &task); end

  def <=>(other); end
  def cancel; end
  def cancelled?; end
  def execute; end
  def executor; end
  def initial_delay; end
  def process_task; end
  def processing?; end
  def reschedule(delay); end
  def reset; end
  def schedule_time; end

  protected

  def ns_reschedule(delay); end
  def ns_schedule(delay); end

  class << self
    def execute(delay, opts = T.unsafe(nil), &task); end
  end
end

class Concurrent::Semaphore < ::Concurrent::MutexSemaphore; end
Concurrent::SemaphoreImplementation = Concurrent::MutexSemaphore

module Concurrent::SerialExecutorService
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging
  include ::Concurrent::ExecutorService

  def serialized?; end
end

class Concurrent::SerializedExecution < ::Concurrent::Synchronization::LockableObject
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging

  def initialize; end

  def post(executor, *args, &task); end
  def posts(posts); end

  private

  def call_job(job); end
  def ns_initialize; end
  def work(job); end
end

class Concurrent::SerializedExecution::Job < ::Struct
  def args; end
  def args=(_); end
  def block; end
  def block=(_); end
  def call; end
  def executor; end
  def executor=(_); end

  class << self
    def [](*_arg0); end
    def inspect; end
    def members; end
    def new(*_arg0); end
  end
end

class Concurrent::SerializedExecutionDelegator < ::SimpleDelegator
  include ::Logger::Severity
  include ::Concurrent::Concern::Logging
  include ::Concurrent::ExecutorService
  include ::Concurrent::SerialExecutorService

  def initialize(executor); end

  def post(*args, &task); end
end

class Concurrent::Set < ::Concurrent::CRubySet; end
Concurrent::SetImplementation = Concurrent::CRubySet

module Concurrent::SettableStruct
  include ::Concurrent::Synchronization::AbstractStruct

  def ==(other); end
  def [](member); end
  def []=(member, value); end
  def each(&block); end
  def each_pair(&block); end
  def inspect; end
  def merge(other, &block); end
  def select(&block); end
  def to_a; end
  def to_h; end
  def to_s; end
  def values; end
  def values_at(*indexes); end

  private

  def initialize_copy(original); end

  class << self
    def new(*args, &block); end
  end
end

Concurrent::SettableStruct::FACTORY = T.let(T.unsafe(nil), T.untyped)

class Concurrent::SimpleExecutorService < ::Concurrent::RubyExecutorService
  def <<(task); end
  def kill; end
  def post(*args, &task); end
  def running?; end
  def shutdown; end
  def shutdown?; end
  def shuttingdown?; end
  def wait_for_termination(timeout = T.unsafe(nil)); end

  private

  def ns_initialize(*args); end

  class << self
    def <<(task); end
    def post(*args); end
  end
end

class Concurrent::SingleThreadExecutor < ::Concurrent::RubySingleThreadExecutor; end
Concurrent::SingleThreadExecutorImplementation = Concurrent::RubySingleThreadExecutor
module Concurrent::Synchronization; end

class Concurrent::Synchronization::AbstractLockableObject < ::Concurrent::Synchronization::Object
  protected

  def ns_broadcast; end
  def ns_signal; end
  def ns_wait(timeout = T.unsafe(nil)); end
  def ns_wait_until(timeout = T.unsafe(nil), &condition); end
  def synchronize; end
end

class Concurrent::Synchronization::AbstractObject
  def initialize; end

  def full_memory_barrier; end

  class << self
    def attr_volatile(*names); end
  end
end

module Concurrent::Synchronization::AbstractStruct
  def initialize(*values); end

  def length; end
  def members; end
  def size; end

  protected

  def ns_each; end
  def ns_each_pair; end
  def ns_equality(other); end
  def ns_get(member); end
  def ns_initialize_copy; end
  def ns_inspect; end
  def ns_merge(other, &block); end
  def ns_select; end
  def ns_to_h; end
  def ns_values; end
  def ns_values_at(indexes); end
  def pr_underscore(clazz); end

  class << self
    def define_struct_class(parent, base, name, members, &block); end
  end
end

class Concurrent::Synchronization::Condition < ::Concurrent::Synchronization::LockableObject
  def initialize(lock); end

  def broadcast; end
  def ns_broadcast; end
  def ns_signal; end
  def ns_wait(timeout = T.unsafe(nil)); end
  def ns_wait_until(timeout = T.unsafe(nil), &condition); end
  def signal; end
  def wait(timeout = T.unsafe(nil)); end
  def wait_until(timeout = T.unsafe(nil), &condition); end

  class << self
    def private_new(*args, &block); end
  end
end

module Concurrent::Synchronization::ConditionSignalling
  protected

  def ns_broadcast; end
  def ns_signal; end
end

class Concurrent::Synchronization::Lock < ::Concurrent::Synchronization::LockableObject
  def broadcast; end
  def signal; end
  def wait(timeout = T.unsafe(nil)); end
  def wait_until(timeout = T.unsafe(nil), &condition); end
end

class Concurrent::Synchronization::LockableObject < ::Concurrent::Synchronization::MutexLockableObject
  def new_condition; end
end

Concurrent::Synchronization::LockableObjectImplementation = Concurrent::Synchronization::MutexLockableObject

class Concurrent::Synchronization::MonitorLockableObject < ::Concurrent::Synchronization::AbstractLockableObject
  include ::Concurrent::Synchronization::ConditionSignalling

  def initialize(*defaults); end

  protected

  def ns_wait(timeout = T.unsafe(nil)); end
  def synchronize; end

  private

  def initialize_copy(other); end

  class << self
    def new(*args, &block); end
  end
end

module Concurrent::Synchronization::MriAttrVolatile
  mixes_in_class_methods ::Concurrent::Synchronization::MriAttrVolatile::ClassMethods

  def full_memory_barrier; end

  class << self
    def included(base); end
  end
end

module Concurrent::Synchronization::MriAttrVolatile::ClassMethods
  def attr_volatile(*names); end
end

class Concurrent::Synchronization::MriObject < ::Concurrent::Synchronization::AbstractObject
  include ::Concurrent::Synchronization::MriAttrVolatile
  extend ::Concurrent::Synchronization::MriAttrVolatile::ClassMethods

  def initialize; end
end

class Concurrent::Synchronization::MutexLockableObject < ::Concurrent::Synchronization::AbstractLockableObject
  include ::Concurrent::Synchronization::ConditionSignalling

  def initialize(*defaults); end

  protected

  def ns_wait(timeout = T.unsafe(nil)); end
  def synchronize; end

  private

  def initialize_copy(other); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::Synchronization::Object < ::Concurrent::Synchronization::MriObject
  def initialize; end

  private

  def __initialize_atomic_fields__; end

  class << self
    def atomic_attribute?(name); end
    def atomic_attributes(inherited = T.unsafe(nil)); end
    def attr_atomic(*names); end
    def ensure_safe_initialization_when_final_fields_are_present; end
    def safe_initialization!; end
    def safe_initialization?; end

    private

    def define_initialize_atomic_fields; end
  end
end

Concurrent::Synchronization::ObjectImplementation = Concurrent::Synchronization::MriObject

module Concurrent::Synchronization::RbxAttrVolatile
  mixes_in_class_methods ::Concurrent::Synchronization::RbxAttrVolatile::ClassMethods

  def full_memory_barrier; end

  class << self
    def included(base); end
  end
end

module Concurrent::Synchronization::RbxAttrVolatile::ClassMethods
  def attr_volatile(*names); end
end

class Concurrent::Synchronization::RbxLockableObject < ::Concurrent::Synchronization::AbstractLockableObject
  def initialize(*defaults); end

  protected

  def ns_broadcast; end
  def ns_signal; end
  def ns_wait(timeout = T.unsafe(nil)); end
  def synchronize(&block); end

  private

  def initialize_copy(other); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::Synchronization::RbxObject < ::Concurrent::Synchronization::AbstractObject
  include ::Concurrent::Synchronization::RbxAttrVolatile
  extend ::Concurrent::Synchronization::RbxAttrVolatile::ClassMethods

  def initialize; end
end

module Concurrent::Synchronization::TruffleRubyAttrVolatile
  mixes_in_class_methods ::Concurrent::Synchronization::TruffleRubyAttrVolatile::ClassMethods

  def full_memory_barrier; end

  class << self
    def included(base); end
  end
end

module Concurrent::Synchronization::TruffleRubyAttrVolatile::ClassMethods
  def attr_volatile(*names); end
end

class Concurrent::Synchronization::TruffleRubyObject < ::Concurrent::Synchronization::AbstractObject
  include ::Concurrent::Synchronization::TruffleRubyAttrVolatile
  extend ::Concurrent::Synchronization::TruffleRubyAttrVolatile::ClassMethods

  def initialize; end
end

Concurrent::Synchronization::Volatile = Concurrent::Synchronization::MriAttrVolatile

class Concurrent::SynchronizedDelegator < ::SimpleDelegator
  def initialize(obj); end

  def method_missing(method, *args, &block); end
  def setup; end
  def teardown; end
end

class Concurrent::TVar < ::Concurrent::Synchronization::Object
  def initialize(value); end

  def unsafe_increment_version; end
  def unsafe_lock; end
  def unsafe_value; end
  def unsafe_value=(value); end
  def unsafe_version; end
  def value; end
  def value=(value); end

  class << self
    def new(*args, &block); end
  end
end

class Concurrent::ThreadLocalVar < ::Concurrent::RubyThreadLocalVar; end
Concurrent::ThreadLocalVarImplementation = Concurrent::RubyThreadLocalVar
class Concurrent::ThreadPoolExecutor < ::Concurrent::RubyThreadPoolExecutor; end
Concurrent::ThreadPoolExecutorImplementation = Concurrent::RubyThreadPoolExecutor
module Concurrent::ThreadSafe; end

module Concurrent::ThreadSafe::Util
  class << self
    def make_synchronized_on_cruby(klass); end
    def make_synchronized_on_rbx(klass); end
    def make_synchronized_on_truffleruby(klass); end
  end
end

Concurrent::ThreadSafe::Util::CPU_COUNT = T.let(T.unsafe(nil), Integer)
Concurrent::ThreadSafe::Util::FIXNUM_BIT_SIZE = T.let(T.unsafe(nil), Integer)
Concurrent::ThreadSafe::Util::MAX_INT = T.let(T.unsafe(nil), Integer)
class Concurrent::TimeoutError < ::Concurrent::Error; end

class Concurrent::TimerSet < ::Concurrent::RubyExecutorService
  def initialize(opts = T.unsafe(nil)); end

  def kill; end
  def post(delay, *args, &task); end

  private

  def ns_initialize(opts); end
  def ns_post_task(task); end
  def ns_reset_if_forked; end
  def ns_shutdown_execution; end
  def post_task(task); end
  def process_tasks; end
  def remove_task(task); end
end

class Concurrent::TimerTask < ::Concurrent::RubyExecutorService
  include ::Concurrent::Concern::Dereferenceable
  include ::Concurrent::Concern::Observable

  def initialize(opts = T.unsafe(nil), &task); end

  def execute; end
  def execution_interval; end
  def execution_interval=(value); end
  def running?; end
  def timeout_interval; end
  def timeout_interval=(value); end

  private

  def execute_task(completion); end
  def ns_initialize(opts, &task); end
  def ns_kill_execution; end
  def ns_shutdown_execution; end
  def schedule_next_task(interval = T.unsafe(nil)); end
  def timeout_task(completion); end

  class << self
    def execute(opts = T.unsafe(nil), &task); end
  end
end

Concurrent::TimerTask::EXECUTION_INTERVAL = T.let(T.unsafe(nil), Integer)
Concurrent::TimerTask::TIMEOUT_INTERVAL = T.let(T.unsafe(nil), Integer)

class Concurrent::Transaction
  def initialize; end

  def abort; end
  def commit; end
  def read(tvar); end
  def unlock; end
  def valid?; end
  def write(tvar, value); end

  class << self
    def current; end
    def current=(transaction); end
  end
end

Concurrent::Transaction::ABORTED = T.let(T.unsafe(nil), Object)
class Concurrent::Transaction::AbortError < ::StandardError; end
class Concurrent::Transaction::LeaveError < ::StandardError; end

class Concurrent::Transaction::ReadLogEntry < ::Struct
  def tvar; end
  def tvar=(_); end
  def version; end
  def version=(_); end

  class << self
    def [](*_arg0); end
    def inspect; end
    def members; end
    def new(*_arg0); end
  end
end

class Concurrent::Tuple
  include ::Enumerable

  def initialize(size); end

  def cas(i, old_value, new_value); end
  def compare_and_set(i, old_value, new_value); end
  def each; end
  def get(i); end
  def set(i, value); end
  def size; end
  def volatile_get(i); end
  def volatile_set(i, value); end
end

Concurrent::Tuple::Tuple = Array
module Concurrent::Utility; end

module Concurrent::Utility::EngineDetector
  def on_cruby?; end
  def on_jruby?; end
  def on_jruby_9000?; end
  def on_linux?; end
  def on_osx?; end
  def on_rbx?; end
  def on_truffleruby?; end
  def on_windows?; end
  def ruby_engine; end
  def ruby_version(version = T.unsafe(nil), comparison, major, minor, patch); end
end

module Concurrent::Utility::NativeExtensionLoader
  def allow_c_extensions?; end
  def c_extensions_loaded?; end
  def java_extensions_loaded?; end
  def load_native_extensions; end

  private

  def load_error_path(error); end
  def set_c_extensions_loaded; end
  def set_java_extensions_loaded; end
  def try_load_c_extension(path); end
end

module Concurrent::Utility::NativeInteger
  extend ::Concurrent::Utility::NativeInteger

  def ensure_integer(value); end
  def ensure_integer_and_bounds(value); end
  def ensure_lower_bound(value); end
  def ensure_positive(value); end
  def ensure_positive_and_no_zero(value); end
  def ensure_upper_bound(value); end
end

Concurrent::Utility::NativeInteger::MAX_VALUE = T.let(T.unsafe(nil), Integer)
Concurrent::Utility::NativeInteger::MIN_VALUE = T.let(T.unsafe(nil), Integer)

class Concurrent::Utility::ProcessorCounter
  def initialize; end

  def physical_processor_count; end
  def processor_count; end

  private

  def compute_physical_processor_count; end
  def compute_processor_count; end
end

Concurrent::VERSION = T.let(T.unsafe(nil), String)
