Java EE を使用して、ゲーム レビュー用のコンテンツ管理システムを開発しています。
私は非常に簡単な質問をしています。ここにそれがあります:
Game オブジェクトを含む ArrayList があります。すべてのゲーム オブジェクトには、次のように定義された単純なクラスである GameRank 属性があります。
public class GameRank
{
private int activity;
private int positiveVotes;
private int negativeVotes;
public GameRank(int activity, int positiveVotes, int negativeVotes)
{
this.activity = activity;
this.positiveVotes = positiveVotes;
this.negativeVotes = negativeVotes;
}
}
Web サイトの訪問者は、ゲームについて賛成票または反対票を投じるオプションがあり、結果は ajax などを使用してサーバーに送信されます。
質問は次のとおりです。
GameRank オブジェクトの属性へのアクセスをどこで同期する必要がありますか? それらのゲッター メソッドとセッター メソッド、またはユーザーの投票を処理し、ゲーム ID に基づいてどのオブジェクトを更新する必要があるかを決定するコントローラー サーブレット内?
10倍前払い
クラス内で同期を使用することにした場合は、AtomicInteger を提案されたポスターの 1 つとして使用するか、次のように使用できます。
public class GameRank
{
private volatile int activity;
private volatile int positiveVotes;
private volatile int negativeVotes;
public GameRank(int activity, int positiveVotes, int negativeVotes)
{
this.activity = activity;
this.positiveVotes = positiveVotes;
this.negativeVotes = negativeVotes;
this.checkAndFixValues();
}
private void checkAndFixValues()
{
if(this.activity < 1) this.activity = 1;
if(this.positiveVotes < 1) this.positiveVotes = 1;
if(this.negativeVotes < 1) this.negativeVotes = 1;
}
public int getActivity()
{
synchronized(GameRank.class)
{
return activity;
}
}
public int getPositiveVotes()
{
synchronized(GameRank.class)
{
return positiveVotes;
}
}
public int getNegativeVotes()
{
synchronized(GameRank.class)
{
return negativeVotes;
}
}
public void incrementActivitiy()
{
synchronized(GameRank.class)
{
activity++;
}
}
}
私は正しいですか?