我是并发新手。我想确保多个客户端可以在线程安全的庄园中访问和更改书籍 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;
}
前端使用 swing 可能很明显,这个前端是多个用户会使用的。isInteger() 仅返回一个布尔值,用于判断作为字符串输入的值是否为整数。toTableDisplayObject() 用于将 ArrayList 转换为摆动表使用的格式。