class Concurrent::AbstractThreadLocalVar

def initialize(default = nil, &default_block)

@!macro thread_local_var_method_initialize
def initialize(default = nil, &default_block)
  if default && block_given?
    raise ArgumentError, "Cannot use both value and block as default value"
  end
  if block_given?
    @default_block = default_block
    @default = nil
  else
    @default_block = nil
    @default = default
  end
  allocate_storage
end