Ver*_*ing 0 java synchronization synchronized-block reentrantlock
我需要像这样的线程安全的arraylist.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据java doc,当使用Collections.synchronizedList时,需要同步对列表的每次访问.我不确定我的同步块是否会这样做?
我使用的synchronized块是否相当于
...
public synchronized void addBooking(Booking booking) {
bookings.add(booking);
}
Run Code Online (Sandbox Code Playgroud)我应该像这样使用ReentrantLock吗?
private Lock lock = new ReentrantLock();
public void addBooking(Booking booking) {
try {
lock.lock;
bookings.add(booking);
} finally {
lock.release();
}
}
Run Code Online (Sandbox Code Playgroud)您不需要同步添加或删除等简单操作,因为这是由实现内部处理的,这正是您使用它们的原因:避免自己处理同步
但是对于超出内部同步范围的迭代或多次删除等复合操作,您必须提供自己的锁定机制.
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |