Spec-Zone.ru › Ruby on Rails 4.2

класс Thread

Родитель:
Объект

Общедоступные методы экземпляра

freeze() Показать исходный код
# File activesupport/lib/active_support/core_ext/thread.rb, line 72
def freeze
  _locals.freeze
  super
end

Замораживает поток, чтобы локальные переменные потока нельзя было установить с помощью #thread_variable_set, а также нельзя было установить локальные переменные волокна.

me = Thread.current
me.freeze
me.thread_variable_set(:oliver, "a")  #=> RuntimeError: can't modify frozen thread locals
me[:oliver] = "a"                     #=> RuntimeError: can't modify frozen thread locals
Вызывает метод суперкласса
thread_variable?(ключ) Показать исходный код
# File activesupport/lib/active_support/core_ext/thread.rb, line 61
def thread_variable?(key)
  _locals.has_key?(key.to_sym)
end

Возвращает true, если заданная строка (или символ) существует в качестве локальной переменной потока.

me = Thread.current
me.thread_variable_set(:oliver, "a")
me.thread_variable?(:oliver)    # => true
me.thread_variable?(:stanley)   # => false

Обратите внимание, что это не локальные переменные волокна. Подробнее см. #thread_variable_get.

thread_variable_get(ключ) Показать исходный код
# File activesupport/lib/active_support/core_ext/thread.rb, line 25
def thread_variable_get(key)
  _locals[key.to_sym]
end

Возвращает значение локальной переменной потока, которое было установлено. Обратите внимание, что эти значения отличаются от локальных значений волокна.

Поток локальные значения переносятся вместе с потоками и не учитывают волокна. Например:

Thread.new {
  Thread.current.thread_variable_set("foo", "bar") # set a thread local
  Thread.current["foo"] = "bar"                    # set a fiber local

  Fiber.new {
    Fiber.yield [
      Thread.current.thread_variable_get("foo"), # get the thread local
      Thread.current["foo"],                     # get the fiber local
    ]
  }.resume
}.join.value # => ['bar', nil]

Значение "bar" возвращается для локальной переменной потока, где nil возвращается для локальной переменной волокна. Волокно выполняется в том же потоке, поэтому доступны локальные переменные потока.

thread_variable_set(ключ, значение) Показать исходный код
# File activesupport/lib/active_support/core_ext/thread.rb, line 32
def thread_variable_set(key, value)
  _locals[key.to_sym] = value
end

Устанавливает локальную переменную потока с key на value. Обратите внимание, что эти переменные локальны для потоков, а не для волокон. Подробнее см. #thread_variable_get.

thread_variables() Показать исходный код
# File activesupport/lib/active_support/core_ext/thread.rb, line 47
def thread_variables
  _locals.keys
end

Возвращает массив имен локальных переменных потока (в качестве символов).

thr = Thread.new do
  Thread.current.thread_variable_set(:cat, 'meow')
  Thread.current.thread_variable_set("dog", 'woof')
end
thr.join               # => #<Thread:0x401b3f10 dead>
thr.thread_variables   # => [:dog, :cat]

Обратите внимание, что это не локальные переменные волокна. Подробнее см. #thread_variable_get.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API