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(),我也就点头过去了。。。。
相关阅读
priorityBlockingQueue with fairness?made a low-level mistakeJNI 诡异问题求教how to open .jar file菜鸟问问题?请问Treeset/Treemap里面subSet(),subMap()的复杂度是多少?JDBC打一些debug information, 这样算不算有用的optimize?anyone familiar with JNA?git question考过SCJP的请进来!joke(fw)C++资深程序员转Java应该如何入手?some simple matters take a long long time to have a solutiona prepared statement question又来麻烦大家,一个extJs的问题 (也许别的script也可以)赶快申办5%返现信用卡,开户就送$150Windows 下 Java console application 的问题DC hot start-up 招 JAVA engineer (sponsor h1b, green-card)Twitter Search is Now 3x Faster using Java server