先上代码
public String deleteNews(Integer id){
String ret;
logger.debug("mydebug news id:"+id);
News news=newsService.selectNewsById(id);
Types types=news.getTypesEnti();
if (types.getOnechildOnly()==1){
ret=ReturnFormat.retParam(2,null);
return ret;
}else{
int no=newsService.deleteNewsById(id);
if (no>0){
ret= ReturnFormat.retParam(0,null);
}else{
ret=ReturnFormat.retParam(1,null);
}
return ret;
}
}
我先传一个types.getOnechildOnly()==1的news ID,这时是正常的
然后我再传一个types.getOnechildOnly()!=1的ID,这个时候也是正常的,
但是当我再重复1和2步骤时,newsService.selectNewsById(id);有时候会出现
空值情况.我打印了下,好像他删除的还是前一个已经删除的id,这种情况怎么处理?
线程安不安全取决于你怎么用,反正记住一点,共享资源不要定义全局的变量,只定义常量和注入的bean,这样基本不会有线程安全问题的出现。
通常都是 调用 controller 和service里面的方法, 方法是在虚拟机栈中执行的 每个线程都有各自的栈空间, 所以没有线程安全问题,
但是如果在 controller类中 定义了 属性, 并且在方法中使用, 这个时候就存在线程安全问题了.因为多个线程共享 controller的对象实例的属性.