读书人

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

发布时间: 2012-02-12 17:16:33 作者: rapoo

静态方法出现线程不安全问题
如下程序
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后,就不会再出现了.很是奇怪.
求高人指点一下其中原因...

[解决办法]
在方法声明的时候加上synchronized不知道行不行哦
[解决办法]
你这个程序太有问题.company.getName()为null的情况完全取决于stringMap的key值是什么.和多线程没有任务关系.
[解决办法]
同步住stringMap就可以了,它和company没有关系

[解决办法]
线程不安全就用线程锁,如果怕影响性能再加个if与线程锁的双锁。

读书人网 >J2SE开发

热点推荐