2017-04-07 13 views

答えて

2

Thread current = Thread.currentThread() 

そして今を。スレッドのマップ/リスト/ ...がある場合は、単純に参照を比較できます。簡単な例:

あなたのクラスには2つのフィールドを追加します。

private Thread reader = 
private Thread writer = 

をそしてあなたは

synchronized foo() { 
    if (Thread.currentThread() == reader) ... 

とレコードの操作を行うことができます:物事は簡単に、人が扱っていることを見たが "この問題はむしろ後退しなければならない:これはXY problem のすべての場所のにおいをする。

意味:「実際の」世界では、私はこのようなコードをにすると悪い習慣と考えています。おそらく、それは他の方法で解決すべき問題を解決しようとします!

したがって、インタビュアーへの回答は、技術的な直接的な回答の組み合わせがよいでしょう。その "悪い練習"問題を指摘している。

0

現在のスレッドがinstanceofのリーダーであるかライター

+0

'にThread.currentThread()は'常にThread'のinstanceof 'ものを返すかどうかを確認します。しかし、 'extends Thread'は通常はコードの匂いであるため、現在のThreadオブジェクトの_type_を見るだけでは、コードが悪臭を感じないかどうかは分かりません。 GhostCatのように、オブジェクトの_identity_を使用する方がよいでしょう。何よりも、誰がそれを呼んでいるかに応じて、異なることをするコードを書かない方が良いでしょう。 –

関連する問題