私は同時実行が初めてです。複数のクライアントがブックの ArrayList にアクセスして変更できるように、スレッドセーフなマナーを確保したいと考えています。以下は正しいですか?シンプルな生産消費モデルを使用しようとしています。
protected List<Book> books = Collections.synchronizedList(new ArrayList<Book>());
// producer consumer model
protected Object[] produce(JTextField input) {
synchronized (books) {
if (isInteger(input.getText())) {
for (Book b : books) {
if (Integer.parseInt(b.BookID) == Integer.parseInt(input
.getText())) {
b.Available = Integer.toString((Integer
.parseInt(b.Available) + 1));
saveTextRecord();
// show on table
return toTableDisplayObject(b.toString());
}
}
}
}
return null;
}
protected Object[] consume(JTextField input) {
synchronized (books) {
if (isInteger(input.getText())) {
for (Book b : books) {
if (Integer.parseInt(b.BookID) == Integer.parseInt(input
.getText())) {
b.Available = Integer.toString((Integer
.parseInt(b.Available) - 1));
saveTextRecord();
// show on table
return toTableDisplayObject(b.toString());
}
}
}
}
return null;
}
フロントでスイングを使用しているのは明らかです。このフロントエンドは、複数のユーザーが使用するものです。isInteger() は、文字列として入力された値が整数であるかどうかのブール値を返すだけです。toTableDisplayObject() は、ArrayList をスイング テーブルで使用するための形式に変換するために使用されます。