hatellla:
この質問はの拡張であるこの質問。
何という問題の場合は、AbcRunnable
のみから呼び出さなっているメソッドを持つクラスとメンバ変数を持っているでしょうRunnable
。例えば
public class AbcRunnable implements Runnable
{
private final AbcSupplier supplier;
public void run() {
List<Message> messages = supplier.get();
}
}
public class AbcSupplier implements Supplier<List<Message>> {
public List<Message> get() {
List<Message> list = new ArrayList<>();
/*
Some operations on list
*/
return list
}
}
2つのスレッドがオブジェクトの共有している場合、この場合は、だから、AbcSupplier
我々はそれのインスタンスを1つだけ作成しているために。その後、彼らはまた、そこでのローカル変数のリストを共有するのだろうか?それとも、ではないでしょうか?
私は自分でそれを実行してみました。彼らは必ず共有ではなく、100%を取得している、のように私には、それが見えました。
ernest_k:
第二のスレッドが実行中AbcRunnable.run()
で返されるリストの同じインスタンスを共有することはありませんAbcSupplier.get()
。これは、get()
作成しArrayList
、インスタンスは、それが実行されるたびに。
ここではスレッドが同じリストを共有させるようなバージョンがあります:
public class AbcSupplier implements Supplier<List<Message>> {
List<Message> list = new ArrayList<>();
public AbcSupplier() {
......
Some operations on list
......
}
public List<Message> get() {
return list;
}
}
この場合、同じAbcSupplier
インスタンスが同じ返すList
インスタンスを。