【发布时间】:2013-06-20 13:38:02
【问题描述】:
我需要一个这样的线程安全数组列表。
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 doc,使用 Collections.synchronizedList 时需要同步对列表的每次访问。我不确定我的同步块是否会这样做?
-
我对同步块的使用是否等同于
... public synchronized void addBooking(Booking booking) { bookings.add(booking); } -
我应该使用这样的 ReentrantLock
private Lock lock = new ReentrantLock(); public void addBooking(Booking booking) { try { lock.lock; bookings.add(booking); } finally { lock.release(); } }
【问题讨论】:
-
在这种情况下:是的!
-
你可以参考这个链接它会解决你的问题[点击这里][1] [1]:stackoverflow.com/questions/3814325/…
标签: java synchronization reentrantlock synchronized-block