當我想引用一個線程的環境中當前線程,一些策略似乎工作:如何引用當前線程
t = Thread.new{p t}
Thread.new{|t| p t}
Thread.new{p Thread.current}
Thread.new{p self}
它們都是否等同?是否有理由在特定環境下選擇其中一個?
當我想引用一個線程的環境中當前線程,一些策略似乎工作:如何引用當前線程
t = Thread.new{p t}
Thread.new{|t| p t}
Thread.new{p Thread.current}
Thread.new{p self}
它們都是否等同?是否有理由在特定環境下選擇其中一個?
self
只會在傳遞給Thread.new
的塊內直接調用它,而不是如果您從該線程上運行的另一個類的方法內部調用它。如果您使用Thread.new { |t| p t}
方法,則如果要在該線程上運行的其他方法中使用它,則必須通過t
。但Thread.current
的作品無論你從哪裏來。
我會使用Thread.current
,因爲它明顯地告訴讀者如何閱讀代碼。有些讀者可能不知道,如果Thread.new
塊接受一個參數,則新線程將被傳遞給該參數。 self
也未必100%清晰。但任何讀者都應該立即明白Thread.current
的含義。
除了Alex的回答,我注意到應該避免t = Thread.new{p t}
。在某些情況下,當運行子線程速度較快時,在主線程中對變量t
的分配可能不會在子線程內調用時完成,在這種情況下,未定義t
(返回nil
)還是別的。
簡短的回答是:Thread.current
是最常用的方法來獲得當前線程
怪異的IM發現'self'犯規參考線:'Thread.new {P自我} .join'打印'main' – AJcodez 2013-04-15 06:52:12