tip1:合理使用成员变量与临时变量
来源:互联网 发布:java http连接池 编辑:程序博客网 时间:2024/04/28 05:57
正确区分类成员变量与临时变量,如:
- void foo()
- {
- ConnectionProvider cp = ConnectionProvider.getInstance();
- Connection conn = cp.getConnection();//获取一个连接
- ...
- cp.close(conn);//关闭之
- }
这里conn是一个临时变量,它由getConnection()输出,由close()输入。但如果改成类属性:
- class ConnectionProvider
- {
- Connection _conn;
- Connection open()
- {
- _conn = getConnection();
- }
- void close()
- {
- _conn.close();
- }
- }
- void foo()
- {
- ConnectionProvider cp = ConnectionProvider.getInstance();
- Connection conn = cp.getConnection();
- ...
- cp.close();
- }
试想一下,将这段代码放到多线程环境吧!
假设一个线程刚刚取出conn,另外一个线程却调用了close(),那是什么样的情况?!这就像你的银行卡还没来得及取出来,别人已经取出了其中的钱。这样的问题,即传说中的“线程安全”问题。
解决办法是:换用临时变量,并将其当作函数参数传递到close()函数中去,这样就不会带来“线程安全”问题。临时变量不会共享内存,而同一个对象的成员变量,则有可能由于共享造成并发冲突!
实际上,我遇到的一个bug要比这个隐蔽的多,它是一个多线程FTP下载工具中的bug。多线程环境下的bug比较难于发现和查错,所以很多时候就要求我们的开发人员,尽量正确的使用成员变量与临时变量,正确定义每个类的方法接口,这个是很重要的!
=======================================
如上内容为白乔原创,转载请注明出处。
点击此处,查看作者的新作《把脉VC++》 。
如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533
- tip1:合理使用成员变量与临时变量
- 实例变量与成员变量的使用
- 表变量与临时表使用注意
- oracle使用临时变量
- 成员变量与方法变量
- 局部变量与成员变量
- 局部变量与成员变量
- 局部变量与成员变量
- 成员变量与局部变量
- 局部变量与成员变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- 成员变量与局部变量
- NetBeans 安装Bug
- MD!写个快排写了我一个上午!!!
- 微软面试题
- 今天 看了 李兴华话老师的终极资料
- 学习数据库 SQL 的重要性
- tip1:合理使用成员变量与临时变量
- 【转载】学习asp.net比较完整的流程
- 随笔
- 【C#笔记】关于 Random类
- 好好睡一觉
- 框架frameset/frame
- java
- 系统程序员成长计划-组合的威力(二)
- jdk1.4如何使用UUID类