私はウェブブラウザゲームを開発していますが、スレッドセーフについて質問したいと思います。ドメインクラス(データベースエンティティ)UserとMyBuildingがあるとしましょう:
class User
{
public String name;
List<Building> myBuildings = new ArrayList<Building>();
}
と
class MyBuilding
{
public int buildingId;
public int level;
}
ここで、ユーザーはたとえば建物のヘルスポイントを取得したいと考えています。これらの建物の仕様に関する情報を格納する別のクラスがあります。これはデータベースに保存する必要はありません。これらは「建物の仕様」クラスであり、Webアプリケーションの開始時にxmlファイルから初期化されます。例えば:
@Component
class BuildingSpecificationHolder
{
public List<BuildingSpecification> buildings = new ArrayList<BuildingSpecification>();
}
//以下のクラスはSpringコンポーネントではなく、単純なクラスです
class BuildingSpecification
{
public int getHealthPointByBuildingLevel(MyBuilding usersBuilding)
{
return usersBuilding.getLevel() * 10;
}
そして今、私の質問は次のとおりです。'public int getHealthPointByBuildingLevel(MyBuilding usersBuilding)'スレッドは安全ですか?同時に異なるユーザーがhpを構築したい場合、それらはすべて、NON-springオブジェクトにある上記のメソッドにアクセスします。'BuildingSpecification'のすべてのメソッドは読み取り専用です(ユーザーがBuildingプロパティを変更することはありません)が、異なるユーザーがそれらのメソッドに異なる'MyBuilding'パラメーターを渡すことに注意してください。これらのBuildings仕様を保持するクラスのみがSpringコンポーネントです。