静态方法出现线程不安全问题

broust 2007-08-04 04:58:01
如下程序
public static Company formatCompany(Map stringMap) throws Exception{
Company company = new Company();

Set keySet = stringMap.keySet();

Iterator it = keySet.iterator();

while(it.hasNext()){

String key = (String)it.next();

if("Company Name:".equals(key)){
String name = getCurrentLengthString((String)stringMap.get(key),150,true,true);
company.setName(name);
}else
if("Website:".equals(key)){
String website = getCurrentLengthString((String)stringMap.get(key),400,true,false);
company.setWebsite(website);
}else{
throw new Exception("property is not mached");
}
}

return company;
}
这个方法在多线程环境中被调用,我可以确保company都会被设置Name和webSite,但是我却在程序中得到company.getName = null!当我把线程数改成1后,就不会再出现了.很是奇怪.
求高人指点一下其中原因...
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2007-08-04
  • 打赏
  • 举报
回复
线程不安全就用线程锁,如果怕影响性能再加个if与线程锁的双锁。
hello_wyq 2007-08-04
  • 打赏
  • 举报
回复
同步住stringMap就可以了,它和company没有关系
yangjun210 2007-08-04
  • 打赏
  • 举报
回复
你这个程序太有问题.company.getName()为null的情况完全取决于stringMap的key值是什么.和多线程没有任务关系.
joejoe1991 2007-08-04
  • 打赏
  • 举报
回复
在方法声明的时候加上synchronized不知道行不行哦

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧