孙鑫老师的JSP深入详解第9章的购物车例子中CartBean.java表示购物车,提供了增加、删除购物车条目、计算价格等的功能。package com.jin.ch09.sportsreading;import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import com.jin.ch09.sportsreading.FloatOperation;public class CartBean implements Serializable {
private HashMap<Integer, CartItemBean> items = null;
public CartBean() {
items = new HashMap<Integer, CartItemBean>();
}
public synchronized void deleteItem(Integer bookId) {
if(items.containsKey(bookId)) {
items.remove(bookId);
}
}
public synchronized void clear() {
items.clear();
}
public synchronized int getNumofItems() {
return items.size();
}
public synchronized float getTotalPrice() {
float totalPrice = 0;
Collection<CartItemBean> c = items.values();
Iterator<CartItemBean> it = c.iterator();
while(it.hasNext()) {
CartItemBean item = it.next();
float itemPrice = item.getItemPrice();
totalPrice = FloatOperation.add(totalPrice,itemPrice);
}
return totalPrice;
}
public synchronized boolean isExist(Integer bookId) {
if(items.containsKey(bookId)) {
return true;
} else {
return false;
}
}
}请问为什么在购物车CartBean里的每个方法都加synchronized呢?我懂synchrozied的意思,但这里不知道为什么要进行同步.
CartBean是作为session使用的,每个用户都拥有自己的CartBean对象,为什么还要在其中方法上加同步锁呢?
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import com.jin.ch09.sportsreading.FloatOperation;public class CartBean implements Serializable {
private HashMap<Integer, CartItemBean> items = null;
public CartBean() {
items = new HashMap<Integer, CartItemBean>();
}
public synchronized void deleteItem(Integer bookId) {
if(items.containsKey(bookId)) {
items.remove(bookId);
}
}
public synchronized void clear() {
items.clear();
}
public synchronized int getNumofItems() {
return items.size();
}
public synchronized float getTotalPrice() {
float totalPrice = 0;
Collection<CartItemBean> c = items.values();
Iterator<CartItemBean> it = c.iterator();
while(it.hasNext()) {
CartItemBean item = it.next();
float itemPrice = item.getItemPrice();
totalPrice = FloatOperation.add(totalPrice,itemPrice);
}
return totalPrice;
}
public synchronized boolean isExist(Integer bookId) {
if(items.containsKey(bookId)) {
return true;
} else {
return false;
}
}
}请问为什么在购物车CartBean里的每个方法都加synchronized呢?我懂synchrozied的意思,但这里不知道为什么要进行同步.
CartBean是作为session使用的,每个用户都拥有自己的CartBean对象,为什么还要在其中方法上加同步锁呢?
我自己看的也是他的书。
你一说我到确实觉得是一个疑问,个人觉得可能是一个好的习惯吧,这样的习惯可以最大程度上杜绝bug的存在。
同意11楼
这种写法,可彻底杜绝BUG