ASP.NET线程安全与静态变量的生命周期浅谈

开发 后端
ASP.NET线程安全涉及的是什么呢?ASP.NET线程安全应该注意什么呢?那么本文就将在这几个方面向你介绍,

ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期:

void Application_Start开始

void Application_End结束的,本来这就是对的

今天要做一个全局的应用,想确认一下,在网上一找,我的天,说什么的都有

大概分三种

1.Application_Start——Application_End

2.Session_Start——Session_End

3.类生命周期结束

我用4个机器做了一个测试发现静态变量值一直是不变的,并没有因为其它用户登录而被销毁,确认应该是Application级的

静态类在***访问时会调用静态构造器创建类类型对象,类型对象的生存周期是整个应用程序域的生存周期,也就说被访问过的静态类,只有它所在的应用程序域被卸载时才会被卸载。

类的成员分为两类,静态成员(static member)和实例成员(instance member)。静态成员属于类,实例成员则属于对象,即类的实例。

简单讨论一下在一个类中使用静态字段(static field)和静态方法(static method)是否会有线程安全问题。

我们在知道, 静态字段(static field)和静态方法(static method)的调用是通过类来调用。静态方法不对特定的实例操作,只能访问静态成员。实例方法可对特定的实例操作,既能访问静态成员,也能访问实例成员。

那么,在多线程中使用静态方法是否有ASP.NET线程安全问题?这要看静态方法是是引起ASP.NET线程安全问题要看在静态方法中是否使用了静态成员。

因为,在多线程中使用同一个静态方法时,每个线程使用各自的实例字段(instance field)的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用实例字段(instance field),不会引起安全性问题。但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问的方式进行安全处理。

举个简单的例子,我们使用的Console.WriteLine();中WriteLine()是Console.WriteLine类的静态方法。

对于ASP.NET线程安全中, 多个客户端访问服务器端, 这是一个多线程的例子.只要理解了原因,我们可以在三层架构中的数据访问层中放心使用静态方法(static method)来访问数据库.

静态方法如果没有使用静态变量,则没有线程安全问题。

为什么呢?因为静态方法内声明的变量,每个线程调用时,都会新创建一份,而不会共用一个存储单元。每个线程都会创建自己的一份,因此不会有线程安全问题

注意,静态变量,由于是在类加载时占用一个存储区,每个线程都是共用这个存储区的,所以如果在静态方法里使用了静态变量,这就会有线程安全问题!

ASP.NET线程安全及静态变量生命周期就向你介绍到这,希望对你理解ASP.NET线程安全和静态变量生命周期有所帮助。

【编辑推荐】

  1. ASP.NET缓存分析和实践浅析
  2. ASP.NET数据库缓存浅析
  3. ASP.NET源码之自定义控件DateTimePicker
  4. ASP.NET文件下载函数使用浅析
  5. 构建ASP.NET线程安全集合浅析
责任编辑:仲衡 来源: cnblogs
相关推荐

2009-08-04 16:05:15

ASP.NET页面生命

2009-07-23 10:23:44

2009-07-20 10:33:02

ASP.NET MVC

2013-04-07 10:42:56

Asp.Net页面周期

2009-07-23 18:14:17

MVC生命周期

2009-08-04 16:50:15

ASP.NET页面生命

2009-07-31 10:47:18

ASP.NET页面生命

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-06-18 13:32:39

Java线程生命周期

2012-08-16 09:38:38

ASP.NET

2009-08-10 14:31:46

ASP.NET组件设计ASP.NET控件生命

2009-08-03 14:18:40

ASP.NET编程模型ASP.NET页面生命

2009-02-12 13:16:55

请求生命周期MVCASP.NET

2012-01-16 09:00:56

线程

2009-07-28 09:46:53

ASP.NET服务器控

2009-07-23 18:55:17

ASP.NET页生命周

2011-06-21 10:26:37

2021-04-26 09:22:07

ASP.NET Cor服务周期

2010-04-02 09:02:02

ASP.NET MVC

2010-07-14 10:48:37

Perl线程
点赞
收藏

51CTO技术栈公众号