0

このようなクラスがある場合:

public class Example
{
    ArrayList<String> vector;

    public Example singleton = new Example();

    private Example()
    {
        //Read data from BD and fill the vector. Example vector:  ["foo","voo","faa","vuu","vee"]
    }   



    public synchronized removeElement()
    {
        vector.remove(0);
    }

    public synchronized changeElement()
    {
        vector.set(0,"fii");
    }
}

複数のインスタンスが実行されていて、そのうちの 1 つがメソッドを実行しremoveElementた場合、他のインスタンスの値はどうなりますか? そして、それらの1つがメソッドを実行するとchangeElement?

4

2 に答える 2

5

GAE では複数の JVM インスタンスを並行して実行できるため、メモリ内の値の更新はそのインスタンスでのみ表示されます。

共有データ ストレージを使用する必要があります。memcache (無料、高速ですが揮発性) またはデータストア (コストがかかり、低速ですが一貫性があります) のいずれかです。

于 2013-01-15T19:19:01.490 に答える
1

App Engineインスタンスは別々のJVMで実行されるため、それぞれのメモリに「vector」の別々のインスタンスがあります。これら間で状態を同期するには、データストアやmemcacheなどの共有状態サービスを使用する必要があります。

于 2013-01-15T19:03:13.963 に答える