doGet(){
SomeSingelton.methodOne("url one");
SomeSingelton.methodTwo("url two");
}
//单例实现省略
public class SomeSingelton {
private String url;
public static void methodOne(String url){
setUrl(url);
//http get url
}
public static void methodTwo(String url){
setUrl(url);
//http get url
}
}
会不会有线程A设置了url one,正准备执行http get的时候,线程B设置成了url two。导致url one的返回值是url two的??如果有,为什么?如何避免呢?
如果没有线程安全问题请说明原因.
定是有安全问题的,最简单的就是用sync代码段。
url属性既然是作为最小单元的资源那么没别的办法只能sync,这种情况大多数可以改造一下。
你的这个模型不是很好测试,因为最终结果是一样的,你可以试着改改
比如加入一个if-else分别执行m1和m2会更简单的测试
用断点调试的步骤,
1.在方法最后返回处设断点
2.第一次请求
3.取消断点
4.第二次请求
5.将第一次请求放行
这样的话第一次的结果会错误的拿到第二次的结果。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。