• 【转载】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线程安全和静态变量生命周期有所帮助。

    本文转自:http://developer.51cto.com/art/200907/140975.htm

  • 相关阅读:
    JavaWeb项目报错:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
    Linux+Nginx+Tomcat+Redis实现负载均衡,应用集群及session共享
    CENTOS7下安装REDIS
    centOS7访问nginx失败解决-.0:80 failed (98: Address already in use)解决
    Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口
    linux中安装jdk
    在linux系统防火墙中放开对8080端口的限制
    Removing obsolete files from server... Could not clean server of obsolete files
    js关于小数点失精算法修正0.07*100竟然=7.000000000000001
    jquery ajax后台向前台传list 前台用jquery $.each遍历list
  • 原文地址:https://www.cnblogs.com/webconfig/p/3632260.html
Copyright © 2020-2023  润新知