0
我是新來的併發。我想確保多個客戶端可以以線程安全莊園的方式訪問和更改書籍ArrayList。以下是否正確?我正在嘗試使用簡單的產品消耗模型。同時爲多個用戶同步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轉換爲擺動表使用的格式。
退一步是所有的用戶將使用相同的應用程序實例嗎? – BevynQ 2013-05-07 21:29:05
所有用戶都將使用上述代碼所在的類的相同實例。 – 2013-05-07 21:31:41
我會將列表設置爲私有。我也不會返回null,而是返回一個空數組。從併發的角度來看,我看不到任何問題,但它不會很好地擴展(這可能不是問題)。 – BevynQ 2013-05-07 21:53:42