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(),我也就点头过去了。。。。
相关阅读
新手学Java 求建议verawang.com 的网站样式,目前好像很流行。Looking for Java volunteers请问现在做Java+websphere或者ATG平台开发的工作有前途么 (转载)最近碰到的笔试题Java会产生更多的page fault导致速度变慢听说这里big data大拿多, MongoDB和Cassandra,求建议,Java转Javascript?谁搞过machine learning?zkssJava StringBuilder myth debunked用惯了glassfish,突然要我用tomcat,真实不习惯。让cs master做programmer,真是大材小用了。为什医生越老越值钱攒点人品Java那些XML的config file是怎么生成的?把photoshop文件PSD 转换成 HTML流行吗?请问现在重点学啥语言找工作最有利?想有个重点。。。谢谢legacy code里竟然还有scriplet,sighdeveloper, programmer, software engieer有什么区别哎,现在client-side,server-side都要我来写。