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(),我也就点头过去了。。。。
相关阅读
用AWS Elastic Beanstalk怎么配置连接MySQL数据库?一般来说多大的数据量可以称为海量数据呢?java web services怎么把xml,json格式的数据解析?用哪些插件真羡慕版上大牛能用那么多牛逼技术啊~~问个constructor的基本问题如何学习 Hadoop面试被问了个奇怪的GC问题这VM CPU太weak怎么Identify?zookeeperJava Job Opportunitydistributed有大牛用Hive吗?OpenShift能后期加载Catridge吗大家来解剖个鸵鸟 (转载)Java 问题,请教如何找出一个array里的duplicate segments? (转载)现在感觉到为什么大家说mongo有很多问题了问JavaFX的一个问题goodbug, aws上怎么实现web server,app server分离,2个firewall的?觉得有点绝望版上有用hadoop的吗?