博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在多线程中使用静态方法是否有线程安全问题
阅读量:6807 次
发布时间:2019-06-26

本文共 702 字,大约阅读时间需要 2 分钟。

hot3.png

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

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

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

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

    因为,在多线程中使用同一个静态方法时,每个线程使用各自的实例字段(instance field)的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用实例字段(instance field),不会引起安全性问题。但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问的方式进行安全处理。
    
    举个简单的例子,我们使用的Console.WriteLine();中WriteLine()是Console.WriteLine类的静态方法。
     对于ASP.NET, 多个客户端访问服务器端, 这是一个多线程的例子.只要理解了原因,我们可以在三层架构中的数据访问层中放心使用静态方法(static method)来访问数据库.

转载于:https://my.oschina.net/iyinghui/blog/624843

你可能感兴趣的文章
OSI参考模型与排错
查看>>
Spark Streaming原理简析
查看>>
TCP协议的三次握手+四次断开
查看>>
Selenium2.41.0—获取动态资源 (转)
查看>>
Confluence 6 配置数字格式
查看>>
深入BUG分析
查看>>
销售灵魂人物的潜伏笔记5
查看>>
SQL代码自动生成器
查看>>
向左还是往右?Chris Dixon谈何时放弃你的idea
查看>>
OC 计算幂集 - 递归法
查看>>
xstream使用的第二个小问题
查看>>
只会编程的程序员没有前途
查看>>
Litespeed如何安装phpmyadmin/pureftpd
查看>>
四层和七层负载均衡的区别
查看>>
Nginx+Tomcat关于Session的管理
查看>>
我的友情链接
查看>>
Linux Vue环境搭建
查看>>
String、StringBuffer和StringBuilder
查看>>
SUDO 操作详解
查看>>
CSDN泄密统计
查看>>