インターネット上に同様の質問がすでにたくさんあることは承知していますが、私の質問は私のコードに関するものであり、スレッドに関するものではありません。プレーヤーのデータベースを持つ小さなアプリを作成しています。データ格納クラスのコードは次のとおりです。
public class DataManager
{
static final int NO_OF_COLUMNS = 18;
static QDatabase pdb;
public DataManager()
{
pdb = new QDatabase(NO_OF_COLUMNS);
}
public void addPlayer(Object[] playerData)
{
pdb.add(playerData);
}
public void editPlayerInfo(int type, int playerRegNo, Object data)
{
pdb.set(type, playerRegNo, data);
}
public int getPlayerRegNo(String userID)
{
return (int) pdb.getData(USER_ID, userID, REG_NO);
}
public Boolean contains(int column, Object data)
{
return pdb.contains(column, data);
}
}
複数のクライアントからリクエストを受信し、それぞれに新しいスレッドを作成し続けるサーバーがあります。それらはすべて、基本的にデータベースとして機能するこの DataManager クラスにアクセスします。addPlayer()
何らかの方法で、すべてのスレッドがメソッドとeditPlayerInfo()
メソッドを同時に呼び出すことができるようにすることはできますか?
また、データベースを使用できることも知っています。しかし、ここでは、これは簡単だと思いました。約 200 のスレッドが同時に実行されると想定します。これを解決する最善の方法は何ですか?
すべてのスレッドが同時にアクセスできるようにする方法はありますか?そうしないと、200 のスレッドが互いに待機すると非常に遅くなる可能性があります。
編集 1: QDatabase クラスは次のとおりです。
public class QDatabase implements Serializable
{
private ArrayList<ArrayList<Object>> database;
public final int NOT_EXISTS = 0, REGULAR = 0, TRANSPOSE = 1;
private int lastid = -1;
//Initializer taking the number of columns as an argument
public QDatabase(int noofcolumns)
{
database = new ArrayList<ArrayList<Object>>();
addColumns(noofcolumns);
}
//Method that adds an array of objects as a new row in the database.
public void add(Object[] object)
{
for(int index = 0; index < database.size(); index++)
{
if(object != null)
{
database.get(index).add(object[index]);
lastid = database.get(0).indexOf(object[0]);
}
}
}
//Method that finds the row in a column where an instance of a particular object is found and get the values at a
//cell with the same row and a given column.
public Object getData(int columntocheck, Object check, int columntoget)
{
Object ramobject = null;
int loc = database.get(columntocheck).indexOf(check);
ramobject = database.get(columntoget).get(loc);
return ramobject;
}
//Method to check if a column contains an instance of a given object.
public Boolean contains(int column, Object objecttocheck)
{
return database.get(column).contains(objecttocheck);
}
//Method to set a given cell to an object.
public void set(int column, int row, Object object)
{
database.get(column).set(row, object);
}
}