メソッドのローカル変数はスレッドで共有されていますか?

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インスタンスを。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=235318&siteId=1