多线程中遇到的实例对象被修改问题
2018-05-15,本文 600 字,阅读全文约需 2 分钟
首先就要了解下实例对象之间的赋值与引用
object = other ; 这相当于将 other 对象的引用给 object
object1 = other ; object 与 object1 两个对象的内存地址是一样的
也就是说不管修改哪一个对象的属性,其他对象一样
将对象存到map中,从map取出再将引用给新生成的对象
这两个对象的结果是一样的
这种情况在多线程中就会产生问题
如果没有修改到对象就不会有问题
但是你如果修改了的话,每个线程都从中获取对象,导致这个对象在多线程间共用,一个修改就会引起其他线程对象的值。最终产生问题
解决办法是将这个对象克隆后使用
PricingFormula formula = new PricingFormula();
formula.setPlanID(1);
Map<String, PricingFormula> map = new HashMap<String, PricingFormula>();
map.put("ss",formula);
PricingFormula formula1 = map.get("ss");
PricingFormula formula2 = map.get("ss");
System.out.println(formula1.toString());
System.out.println(formula2.toString());
注意:
以后多线程出现的问题要去寻找共用对象