我需要像這樣的線程安全列表。Java同步語句
public class BookingList {
private List<Booking> bookings;
public BookingList() {
bookings = Collections.synchronizedList(new ArrayList<Booking>());
}
@Override
public void addBooking(Booking booking)
{
synchronized (bookings) {
bookings.add(booking);
}
}
@Override
public void removeBooking(Booking booking)
{
synchronized (bookings) {
bookings.remove(booking);
}
}
}
根據java文檔,當使用Collections.synchronizedList時,需要同步每個訪問列表。我不確定我的同步塊是否會這樣做?
是我使用synchronized塊相當於
... public synchronized void addBooking(Booking booking) { bookings.add(booking); }
我應該使用這樣
private Lock lock = new ReentrantLock(); public void addBooking(Booking booking) { try { lock.lock; bookings.add(booking); } finally { lock.release(); } }
在這種情況下:是的! –
U可以參考這個鏈接它會解決你的問題[點擊這裏] [1] [1]:http://stackoverflow.com/questions/3814325/how-to-create-synchronized-arraylist –