私は次のようなことをよくしています。スレッドに送信するオブジェクトのコピーを作成します。オブジェクトを使用するのはスレッドだけであり、事前発生の関係があるため、スレッドセーフです。
しかし、これは私を緊張させます。コメントにあるように、誰かがやってきて objForThread をいじったらどうなるでしょうか? ロックを使用する必要がありますか? それとも、これは一般的に受け入れられている Java パターンですか?
class Example
{
private SomeObj mDynamicObj = new SomeObj();
public void doWorkInAThread()
{
mutateThis(mDynamicObj);
final SomeObj objForThread = new SomeObj(mDynamicObj);
myExecutorService.submit(new Runnable() { @Override public void run()
{
doSomethingWith(objForThread);
}});
mutateThis(mDynamicObj);
// Concerned that in the future someone will come
// along and mutate objForThread here making this thread unsafe
}
}