synchronized 的问题
public class AttributesStore {
private HashMap usersMap = new HashMap();
private HashMap servicesMap = new HashMap();
public synchronized void setUserInfo(String user, UserInfo userInfo) {
usersMap.put(user, userInfo);
}
public synchronized UserInfo getUserInfo(String user) {
return usersMap.get(user);
}
public synchronized void setServiceInfo(String service,
ServiceInfo serviceInfo) {
servicesMap.put(service, serviceInfo);
}
public synchronized ServiceInfo getServiceInfo(String service) {
return servicesMap.get(service);
}
}
这里,用户和服务数据的访问器方法是同步的,这意味着它们在 AttributesStore 对象上同步。虽然这样做是完全线程安全的,但却增加了毫无实际意义的争用可能性。如果一个线程正在执行 setUserInfo ,就不仅意味着其它线程将被锁在 setUserInfo 和 getUserInfo 外面(这是我们希望的),而且意味着它们也将被锁在 getServiceInfo 和 setServiceInfo 外面。
而且意味着它们也将被锁在 getServiceInfo 和 setServiceInfo 外面。 为甚麽会这样呢
,是方法锁 而不是对象锁
原文 http://www.ibm.com/developerworks/cn/java/j-threads/index2.html
...全文
相关推荐
Java中synchronized关键字引出的多种锁 问题
synchronized关键字是JAVA中常用的同步功能,提供了简单易用的锁功能。这篇文章主要介绍了Java中synchronized关键字引出的多种锁问题,需要的朋友可以参考下
关于synchronized有趣的同步问题
今天小编就为大家分享一篇关于关于synchronized有趣的同步问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
实例解析Java中的synchronized关键字与线程平安问题_.docx
实例解析Java中的synchronized关键字与线程平安问题_.docx
实例解析Java中的synchronized关键字与线程安全问题.docx
实例解析Java中的synchronized关键字与线程安全问题.docx
实例解析Java中的synchronized关键字与线程安全问题
首先要清楚的是synchronized锁住的不是代码而是对象,因而在编写相关的代码块时要注意线程同步安全问题,下面就来以实例解析Java中的synchronized关键字与线程安全问题


Java SE
