概要
Immutable
詳細
Immutableパターンクラスが不変であることを保証し、
マルチスレッドでの実行の際に同期する必要がなくなります。
具体的にはフィールドを初期化時に設定後、変更しないようにします。
書き込み用のアクセサやメソッドは提供しません。
この際、同期処理が不要になるためmutableなクラスに比べて高速になります。
サンプルコード
# encoding: utf-8 require "pp" require "thread" class Hoge attr_accessor :hoge,:hige def initialize(hoge, hige) self.hoge = hoge sleep 1 self.hige = hige end end hoge = Hoge.new("hoge", "hige") puts hoge.frozen? hoge.freeze puts hoge.frozen? threads = [] 5.times do threads << Thread.new do |t| # freezeしたので設定不可 #hoge.hoge = "changed hoge" puts "#{hoge.hoge}:#{hoge.hige}" end end threads.each(&:join)
出力
false true hoge:hige hoge:hige hoge:hige hoge:hige hoge:hige