
根据不同的情况可能存在的情况有:
1、如果该方法不涉及写公共的资源比如一个静态的变量或者写文件,修改某个数据库的值的时候没有影响。
2、比如你这个类里的方法只是对输入的参数做一个计算然后返回计算的值就没有影响。
3、但是如果是修改公共的资源比如修改数据库中存储的一个value则有可能出现问题,如:
public void writeDb(String key, String value) {
collectiondb();
write(key, value);
closeDbCollection();
}
4、因为Java的线程运行顺序是不一定的,可以第一个线程运行完连接数据库到后挂起了,这时候第二个线程开始运行,如果你的collectiondb()处理使用的是类中的一个实例变量Connection conn来保存数据库的连接,当第二个线程运行完毕以后conn也被关闭了,第一个线程继续执行write函数写数据库值的时候就会抛出异常。
这是一个例子,还有其他可能产生脏数据的问题。
多线程如果使用公共资源的话最好在方法上声明synchronized关键字让其同步。
mfc中静态函数的用法步骤如下:
1、配置mfc的使用为在静态库中使用,属性、常规、mfc的使用,选择在静态库中使用。
2、配置运行库,属性、C++、代码生成、运行库,选择“多线程/MT。
3、附加依赖项中加入nafxcwlib和libcmtlib两个库文件,属性、链接器、输入、附加依赖项,添加nafxcwlib和libcmtlib。
有两种方法:a定义线程函数为全局函数b定义线程函数为类的静态成员函数针对线程函数为类的静态成员进行说明。如果是静态数据成员,当然可以直接访问,但是如果要访问非静态数据成员,直接访问是做不到的。如果要想在线程函数中访问和 *** 作类的非静态成员变量,可以把线程函数作为一个适配器,在适配器中调用类的非静态成员函数。例如:classCMyClass{public:voidTestFunc();staticintThreadFunc(LPVOIDpParam);//Adapterprotected:intThreadFuncKernal();//Kernal}voidCMyClass::TestFunc(){AfxBeginThread(TreadFunc,this);}//ThreadfunctionAdapterintCMyClass::ThreadFunc(LPVOIDpParam){CMyClasspObj=(CMyClass)pParam;returnpObj-ThreadFuncKernal();}//ThreadfunctionkernalintCMyClass::ThreadFuncKernal(){while(1){
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)