当前在线人数14114
首页 - 分类讨论区 - 电脑网络 - 爪哇娇娃版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
java多线程问题请教
[版面:爪哇娇娃][首篇作者:DK100] , 2016年01月05日12:34:03 ,811次阅读,3次回复
来APP回复,赚取更多伪币 关注本站公众号:
[分页:1 ]
DK100
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: DK100 (dark knight), 信区: Java
标  题: java多线程问题请教
发信站: BBS 未名空间站 (Tue Jan  5 12:34:03 2016, 美东)

操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
线程下如何synchronize。 我想是用concurrentHashMap当cache

Type是一个interface

一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
class Key {
  public int a;
  public Type t;
  public Key(int a, Type t){...}
  public int hashCode() {...}
  public boolean equals(Key k) {... }
}

List<Value> f(int a, Type t) {
    //这里如何synchronize
    //我想用a和t组成一个string,然后用string来当key,然后synchronize在这个
string上
    StringBuilder sb = new StringBuilder();
    sb.append(a);
    sb.append(t);   
    String key = sb.toString().intern();
    synchronize(key) {
     
       if(map.containsKey(key)){
       return map.get(..);
     }
       // fetch corresponding value from database or some data source
       map.put(key, value);
       ret = value;
    }
    return ret;
}
不知道这么做对不对,合不合理,请多指教,谢谢。
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 137.]

 
Foxman
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: Foxman (今狐冲), 信区: Java
标  题: Re: java多线程问题请教
发信站: BBS 未名空间站 (Thu Jan  7 16:17:52 2016, 美东)

synchronized on String.intern will work but is discouraged because the Java'
s internal String pool is not optimized for large-scale concurrent access.

Basically you need a name-based locking mechanism, which can be implemented
using ConcurrentMap.putIfAbsent

【 在 DK100 (dark knight) 的大作中提到: 】
: 操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
: 的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
: 线程下如何synchronize。 我想是用concurrentHashMap当cache
: Type是一个interface
: 一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
: class Key {
:   public int a;
:   public Type t;
:   public Key(int a, Type t){...}
:   public int hashCode() {...}
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 207.]

 
groundhog09
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: groundhog09 (衰哥), 信区: Java
标  题: Re: java多线程问题请教
发信站: BBS 未名空间站 (Fri Dec  8 19:13:01 2017, 美东)

用guava cache
【 在 DK100 (dark knight) 的大作中提到: 】
: 操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
: 的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
: 线程下如何synchronize。 我想是用concurrentHashMap当cache
: Type是一个interface
: 一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
: class Key {
:   public int a;
:   public Type t;
:   public Key(int a, Type t){...}
:   public int hashCode() {...}
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:f2c0:94a2:]

[分页:1 ]
[快速返回] [ 进入爪哇娇娃讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996