asp.net 静态类多用户访问会不会受影响?
静态类publicstaticstringxxx(stringstr){}这种多用户调用,数据不会受影响吧?publicstaticstringstr;这种多用户调用会受...
静态类
public static string xxx(string str)
{
}
这种多用户调用,数据不会受影响吧?
public static string str;
这种多用户调用会受影响吧?
请指教! 展开
public static string xxx(string str)
{
}
这种多用户调用,数据不会受影响吧?
public static string str;
这种多用户调用会受影响吧?
请指教! 展开
展开全部
你说的多用户访问,是指的多用户访问时,该功能是否线程安全,
有线程安全问题的,一般是方法对引用传递参数的操作,或方法对变量或数据库的操作有问题。
举个例子,下面的代码:
public static int a = 0;
public static string xxx()
{
a++; // 行1
Console.Write(a);// 行2
}
假设同时有a和b这2个用户并发执行xxx方法,那么用户看到的值是不确定的,
因为CPU会在多个进程间调度,
1、可能a执行完行1,接着b执行行1,然后a执行行2,a看的输出就是2了;
2、a执行完行1,接着a执行行2,然后才调度到b执行行1,a看的输出就是1
这么说你明白了吗?
有线程安全问题的,一般是方法对引用传递参数的操作,或方法对变量或数据库的操作有问题。
举个例子,下面的代码:
public static int a = 0;
public static string xxx()
{
a++; // 行1
Console.Write(a);// 行2
}
假设同时有a和b这2个用户并发执行xxx方法,那么用户看到的值是不确定的,
因为CPU会在多个进程间调度,
1、可能a执行完行1,接着b执行行1,然后a执行行2,a看的输出就是2了;
2、a执行完行1,接着a执行行2,然后才调度到b执行行1,a看的输出就是1
这么说你明白了吗?
追问
最终值会不会受影响呢?静态方法是不是要少用?
追答
首先:我举的例子,最终的值不受影响,但是如果方法里有加有减,最终的值就无法确定了,你得到的值可能跟你想像的差距很大;
问题2:静态方法要不要少用,这个问题拆成2个,静态还是非静态没有任何关系,只不过非静态方法必须要有实例才能调用,不管哪种方法,都存在线程安全性问题,要人去想办法规避
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
展开全部
会影响,数据所有用户共享。
更多追问追答
追问
这 两种都会受影响吗?这种
public static string xxx(string str)
{
}
也会受影响?这种的应用场景是什么?
追答
静态方法、静态字段。其实C#中,静态的数据,如果你不添加限制,都不是线程安全的。
但是从运用上来说,静态字段、与静态方法会造成数据混乱的可能性完全不一样。
先说静态字段:所有人都能访问,如果A用户修改了该字段,B用户就会获取到A修改后的数据(这就很容易造成数据混乱)
再说静态方法:如果一个方法有业务逻辑,一般我们都会传递一个主键入方法,然后根据这个主键进行一些操作,所以虽然静态方法A、B用户共享,但是由于传入的主键原因,一般不会造成数据混乱。而且静态方法如果一直有用户访问,那么这个数据就会一直有效,不会被回收掉。这也减少了,对象的创建、对象回收,所消耗的一些资源。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询