HashMap多线程问题,坐等讨论
最近修复了一个bug,是由于hashMap的多线程引起的,现把问题简单化,想听听各位大神的见解!
MainClass:
TaskRunnable:
Action:
我的测试结果如下:
{"map":{"0":"0","79":"79","86":"86"},"userId":"123456","count":0},每次map都不同
想听听各位大声关于最后Redis中存储的Bean的map是多少?
MainClass:
public class MainClass {
public static void main(String[] args) throws InterruptedException {
for(int i = 0;i<100;i++){
Thread t = new Thread(new TaskRunnable(i)); //启动一百个线程测试
t.start();
}
}
}TaskRunnable:
public class TaskRunnable implements Runnable{
private int operationNumber;
public TaskRunnable(int a){
this.operationNumber = a;
}
@Override
public void run() {
Action action = new Action();
Bean bean = action.getAndUpdateBeanFromCache();
System.out.println("threadId is id = " + Thread.currentThread().getId());
if(bean==null){
bean = new Bean();
bean.setUserId("12344");
bean.setCount(11);
}
Map<String,String> map = bean.getMap();
map.put(operationNumber+"",operationNumber+"");
System.out.println("map key = " + operationNumber + " ," + " value = " + operationNumber);
RedisUtil.setCache(RedisConstant.testKey, new Gson().toJson(bean));
}
}Action:
public class Action {
public Bean getAndUpdateBeanFromCache(){
Bean bean = new Bean();
String key = RedisConstant.testKey;
String value = RedisUtil.getCache(key);
Type type = new TypeToken<Bean>(){}.getType();
bean = new Gson().fromJson(value,type);
return bean;
}
}我的测试结果如下:
{"map":{"0":"0","79":"79","86":"86"},"userId":"123456","count":0},每次map都不同

想听听各位大声关于最后Redis中存储的Bean的map是多少?

...全文
相关推荐
java多线程并发及集合框架面试题
这是一个关于java面试的技术文档,里面包含一个中等难度的面试编程题,主要覆盖的java技术范围是JAVA集合框架和多线程并发,文档中有题目的清晰描述并附有完整的实现代码,同时还包括相关技术点的解析,适合java求职者和对java技术研究爱好者。
关于hashMap的一些讨论
HashMap的实现原理的一些讨论,包括数据结构实现,存储数据的实现以及性能参数和Fail-Fas机制。
基于共享内存的hashmap
老外的开源代码,好用,收藏了。
HASHMAP缓存.txt
HASHMAP缓存.txt HASHMAP缓存.txt
【130期】面试官问:HashMap 中变量 modCount 的真实作用是什么?.zip
【130期】面试官问:HashMap 中变量 modCount 的真实作用是什么?.zip


Web 开发
