1

マルチスレッド環境でスレッド実行の最後に実行されるイベントをキューに入れるリスナーをどのように実装しますか? 望ましい動作は、各スレッドにイベント用の独自のキューがあり、それらが混同されてアトミックに実行されないようにすることです。スレッド A が listener.execute() を呼び出すと、「彼の」イベントのみが実行されます。

私が考えることができる唯一の方法は ThreadLocal 変数を使用することですが、ここでの複雑さを考慮すると、使用したくありません。

ツリーがあり、x 個のノードを削除したい場合、各「更新」イベントの後に更新を x 回実行したくないとしますが、それらをキューに入れ、最後に実行することをお勧めします... x を節約します-1 リフレッシュ :-)

4

2 に答える 2

1

本当にThreadLocalを避けたい場合は、パターンを逆にして、(一意の)キュー内のすべてのイベントで所有者スレッドの弱参照を格納できます。

これにより、所有者がもう利用できない場合に、他のスレッドに再デプロイすることもできます。

しかし、「スレッド実行の終了」時に実行されるこのようなイベントのキューの必要性を見たことがないので、少し確信が持てません。あなたは本当にスレッドを持っていますか、それとも本当にタスクやランナブルですか?

于 2012-07-03T20:15:52.513 に答える
0

各スレッドが実行の最後に独自のキューを持つ場合、すべてのキューが 1 メンバー キューになるのではないでしょうか?

于 2012-07-03T20:19:18.917 に答える