分类:
2012-09-01 15:47:56
用户可以利用应用程序的线程错误来查看其他同一时间访问同一函数的同事的信息
Web应用程序可以同时提交多个http请求,开发者通常使用非线程安全的变量。
线程安全的意思是对象或类的空间通常维持一个有效状态,当通过多线程进行并发。
可以利用一个并发的BUG通过同时加载同样的页面,作为其他用户。
因为所有的线程分享同样的方法空间,所有的类变量存在方法空间里面,多线程可以尝试使用同样的类变量并发的。
这种行为的根本原因是JAVA代码对用户名使用一个静态的变量。当提交2次时,同样的线程以及由此产生的包含第一次请求的用户名的同样的静态变量将被使用。
需要检查代码private static String currentUser;
例子比较简单,就是使用2个用户名,几乎同时提交这两个请求,结果全部返回的是同一个用户名的用户信息。
窗口A选择物品后进入purchase页面,窗口B选择更多物品后更新购物车,返回窗口A进行confirm,发现窗口A购买成功,物品是B中选择的商品,但是是A中选择的价格
只要你的静态方法不访问全局变量的话,就不会有并发问题
访问全局变量肯定会出现并发问题,这是毫无疑问的
静态方法内部的变量,都是局部变量,每次调用静态方法时都会重新分配内存空间,所以是安全的