R*o
2 楼
前两天面试。
模拟一个银行账户,有get(key)和put(key, value)两个method,怎么implement。
我随口说hashmap,然后他说要实现多线程,我就说用synchronize。但是如果只
synchronize put的话,也不是线程安全的。这样一个thread用put,另一个thread可以
get,所以我说同时synchronize get和put,用synchronize block。但是他说如果
synchronize both get and put,这样效率低下,这样如果是不同的key,其实不会影
响。他要求对于相同的key synchronize,不同的key不同的线程可以同时调用get和put
method,我就傻逼了,这个不晓得怎么弄。
反正最后折腾半天他说只lock buncket arrayList,然后两个线程不能同时put value
,但是两个线程可以同时hashCode(),我也就点头过去了。。。。
我想请问版上大神,这个lock buncket arrayList要怎么操作,这个怎么就能实现他说
的这个功能了?
模拟一个银行账户,有get(key)和put(key, value)两个method,怎么implement。
我随口说hashmap,然后他说要实现多线程,我就说用synchronize。但是如果只
synchronize put的话,也不是线程安全的。这样一个thread用put,另一个thread可以
get,所以我说同时synchronize get和put,用synchronize block。但是他说如果
synchronize both get and put,这样效率低下,这样如果是不同的key,其实不会影
响。他要求对于相同的key synchronize,不同的key不同的线程可以同时调用get和put
method,我就傻逼了,这个不晓得怎么弄。
反正最后折腾半天他说只lock buncket arrayList,然后两个线程不能同时put value
,但是两个线程可以同时hashCode(),我也就点头过去了。。。。
我想请问版上大神,这个lock buncket arrayList要怎么操作,这个怎么就能实现他说
的这个功能了?
z*3
4 楼
concurrenthashmap
l*g
6 楼
把数据结构改成更细小粒度。然后sync。
HashMap accounts;
public void put(acctId, money) {
Account acct = accounts.get(acctId);
synchronize(acct) {
...
}
}
前两天面试。模拟一个银行账户,有get(key)和put(key, value)两个method,怎么
implement。我随口说hashmap,然后他说要实现多线程,我就说用........
【在 R*********o 的大作中提到】
: 前两天面试。
: 模拟一个银行账户,有get(key)和put(key, value)两个method,怎么implement。
: 我随口说hashmap,然后他说要实现多线程,我就说用synchronize。但是如果只
: synchronize put的话,也不是线程安全的。这样一个thread用put,另一个thread可以
: get,所以我说同时synchronize get和put,用synchronize block。但是他说如果
: synchronize both get and put,这样效率低下,这样如果是不同的key,其实不会影
: 响。他要求对于相同的key synchronize,不同的key不同的线程可以同时调用get和put
: method,我就傻逼了,这个不晓得怎么弄。
: 反正最后折腾半天他说只lock buncket arrayList,然后两个线程不能同时put value
: ,但是两个线程可以同时hashCode(),我也就点头过去了。。。。
HashMap
public void put(acctId, money) {
Account acct = accounts.get(acctId);
synchronize(acct) {
...
}
}
前两天面试。模拟一个银行账户,有get(key)和put(key, value)两个method,怎么
implement。我随口说hashmap,然后他说要实现多线程,我就说用........
【在 R*********o 的大作中提到】
: 前两天面试。
: 模拟一个银行账户,有get(key)和put(key, value)两个method,怎么implement。
: 我随口说hashmap,然后他说要实现多线程,我就说用synchronize。但是如果只
: synchronize put的话,也不是线程安全的。这样一个thread用put,另一个thread可以
: get,所以我说同时synchronize get和put,用synchronize block。但是他说如果
: synchronize both get and put,这样效率低下,这样如果是不同的key,其实不会影
: 响。他要求对于相同的key synchronize,不同的key不同的线程可以同时调用get和put
: method,我就傻逼了,这个不晓得怎么弄。
: 反正最后折腾半天他说只lock buncket arrayList,然后两个线程不能同时put value
: ,但是两个线程可以同时hashCode(),我也就点头过去了。。。。
相关阅读
How to make a jar file in JBuilder?这三种方法获得EJB有何不同?A design for parameter passingJAVA 源代码搜索引擎谁有JAVA中文视频下载?ft, BSF documentation?What xml editor plugin for eclipse?可以从.jar文件中删除一些class吗? (EOM)help: where to download JAVA/swing? (转载)a simple question请问怎么改变org.w3c.dom.Document一个node得值Any UML Eclipse Plusin as Together?海量级数据的算法问题将float变成int的现成函数有么?如何判断输入的是不是数字呀?Re: Non-java storyPlease recommend one introductory Java book help!求助谁有“Java an eventful approach"一书电子版Servlet的IO吞吐瓶颈在哪里?为什么测下来只有3M bytes 左右?