私有静态成员变量,在多线程环境,别的线程会修改当前线程的变量值?
来源:互联网 发布:22端口破解 编辑:程序博客网 时间:2024/06/05 05:14
转自:http://blog.csdn.net/fenglibing/article/details/4076664
情况是这样的,用SOCKET实现了报文接收器,该接收器收到报文后,就调用报文处理线程,而该线程中,要通过反射的机制去调用用户实现的功能,用户实现的功能类是未知道,在配置文件中说明,用户实现的功能类必须要继承一个抽象类,该抽象类规定了用户必须实现的方法,而该抽象类我提供三个方法,两个由我实现,其中就包括可以取到接到的报文,另外一个由用户实现,但用户实现另外一个方法的时候,就需要用到我取得到的报文,所以我要把这个报文在当前线程中可以共享,其它的功能类可以引用该报文做后期的处理。
因为其它的用户需要继承于我写的抽象类,并实现其中的方法即可,他们也需要引用取得的报文,所以这个时候他们必须要可以得到这个报文,但是现在的情况是,我又不操作抽象类,也不可以操作,因为抽象类是不可以实例化,所以我就只有在抽象类中实现取报文的方法,报文要能够共享,我这里就想到采用变量用private static 的形式,然后其GET方法采用默认的,在抽象类就可以采用new 线程类.getMessage();方法去取,这是可行的。我前面采用不用变量定义成静态的,这样去取就取不到值,因为这相当于是重新启了一个类,那肯定就是一切从头了。后面我想,采用JAVABEAN也不一定解决得了问题,因为我不能够往抽象类中传值,所以东西都传不过来呀,如果重新NEW JAVABEAN,也肯定就是空值了。
现在我担心的就是private static定义的静态私有成员变量,会和其它的线程采用同一块存储空间,这样问题就大了,我在网上搜索了大半天也没有找到这个结果,看什么时候解决,或者是可以想一个比较完美的解决方案,不采用静态变量
状态:解决
解决方式,采用ThreadLocal实现,可参见此处:http://blog.csdn.net/fenglibing/archive/2009/04/15/4076885.aspx了解其详细说明及实例。
我解决方式如下:
//当前类:MsgListener
//需要给其它类访问的变量定义
private static String coreMessage;
//通过ThreadLocal设值:
threadLocal.set(message);
//下面为ThreadLocal设值与取值的实现
private static ThreadLocal threadLocal=new ThreadLocal(){
public synchronized Object get()
{
return coreMessage;
}
public synchronized void set(Object coreMessage)
{
MsgListener.coreMessage=(String)coreMessage;
}
};
//该方法提供给其它的类调用
public static String getCoreMessage() {
return (String)threadLocal.get();
}
其它类中调用就简单了:
MsgListener.getCoreMessage();
这里采用ThreadLocal的变量副本概念,这样每个线程都会生成自己的副本,不会与其它的线程相关,所以这样可以避免多个线程的访问时,造成当前线程的变更被别的线程给修改了。
转自:http://blog.csdn.net/fenglibing/article/details/4076664
- 私有静态成员变量,在多线程环境,别的线程会修改当前线程的变量值?
- 私有静态成员变量,在多线程环境,别的线程会修改当前线程的变量值?
- 私有的静态成员变量
- 多线程函数和静态线程函数调用类成员非静态变量和函数的问题
- 线程里面访问私有成员变量 ,ok
- 静态变量,静态成员变量,实例成员变量,局部变量的线程安全问题
- 私有静态成员变量
- 私有静态成员变量
- 线程的静态函数如何访问类的非静态成员函数或成员变量
- iOS_Runtime修改变量值,交换方法实现,动态添加类,成员变量和方法
- 多线程编程中,线程内成员变量
- 线程安全、线程私有变量
- 线程私有变量
- 97-线程私有变量
- 基础知识-私有静态成员变量
- 线程里面访问类的私有成员变量flag,不报错,诧异,求解!
- 关于静态变量的修改以及线程休眠
- 在线程函数中使用主窗口的成员变量
- WP7 Isolated Storage 系列 - 7.读取和存储图像
- (转)Android有用代码片段(二)
- linux系统中/etc/passwd ; /etc/shadow ; /etc/group 这个三个有关用户信息的文件解释
- hud_2037-今年暑假不AC
- uva539 - The Settlers of Catan
- 私有静态成员变量,在多线程环境,别的线程会修改当前线程的变量值?
- Uboot bootargs
- (转)Android有用代码片段(三)
- 中国剩余定理(同余方程组)小结
- IIS短文件名泄露漏洞
- JS 清空File控件的路径值
- 初来乍到— — 动态数字时钟
- iOS的完整学习路线图
- myEclipse项目转成Eclipse开发