synchronized 方式实现监控器中数据成员的同步
要对监控器中的数据成员进行访问,在考虑到多线程的情况下必须使用同步代码块来改变监控器中数据成员的值:
synchronized (mAdapterLocking) {
if (pEvery == 0) {
pEvery = pThisTime;
} else {
// 与上次平均时间进行平均.得到平均处理时间.
pEvery = (pEvery + pThisTime) / 2;
}
// 最长时间。
if (mMsgTimeMax < pThisTime) {
mMsgTimeMax = pThisTime;
}
mMsgCompleteCount++;
mMsgTimeEvery = pEvery;
mMsgBuffered--;
}
先new一个object对象,使用同步方式获得对象锁,在获得对象锁的权限后进程才有权限修改监控器中数据成员。
在监控器中不可修改的变量设置为public static final类型,这些变量在多线程的情况下不会被修改,但是其中的数据成员却可能在多个线程同时访问时在堆内存中被不同的线程修改掉。这时就出现线程读取数据错误的现象。所以必须对可能出现这种bug的数据成员的访问控制使用同步方式synchronized 。
二、在签到操作中的synchronized实现同步
签到操作是针对的操作员,不是每一笔不同的交易。只要该操作员在当天有一次签到操作,那么以后所有交易都会使用该次签到操作获得的令牌。
签到操作与网络传输中的令牌环网的机制是不同的,令牌环网中谁获得令牌谁就可以发送或者接受报文。但是在该业务中的签到操作只是为了标记在当天企业与银行有过交易操作。后续的操作不针对具体的某一笔交易和某一个人,即使是多个人相同的账号操作仍然获得的是相同的令牌。
签到方法:public synchronized String getSignToken() throws Exception{}因为该方法要访问数据成员。在应用中TBankxxx使用的是单例模式。在整个应用中只有一个实力。所以在多线程操作时实际上都是操作了一个对象。这样就应该使用同步处理。避免多个线程的数据混淆。给所有想获得令牌的线程排个队。只要有一个线程执行完成和目标行的签到交易,那么后续的线程都不用再次和目标行通信,直接使用第一个线程获得的令牌即可。
synchronized 方式实现监控器中数据成员的同步的更多相关文章
- YTU 2618: B 求类中数据成员的最大值-类模板
2618: B 求类中数据成员的最大值-类模板 时间限制: 1 Sec 内存限制: 128 MB 提交: 430 解决: 300 题目描述 声明一个类模板,类模板中有三个相同类型的数据成员,有一函 ...
- C++中默认构造函数中数据成员的初始化
构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...
- C++中常量成员函数的含义
C++中常量成员函数的含义 本文内容来源:<C++必知必会> 使用常量成员函数可以改变对象的逻辑状态,虽然对象的物理状态没有发生改变.考虑如下代码,它定义了一个类X: class X{ p ...
- union中的成员不能有构造函数
最近在做项目的CTA测试,快被折腾死了..... -_- 项目中用到的开源库AllJoyn在编译时报错: In file included :, , , , , , , : ./Target/:: e ...
- C++中的static数据成员与static成员函数
本文要点: 1.static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联! aka:每个static数据成 ...
- C++类中的static数据成员,static成员函数
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...
- C++中static修饰的静态成员函数、静态数据成员
1.静态成员函数.静态数据成员 在类中,用static修饰的成员函数被称为静态成员函数,而用static修饰的数据成员就称为静态数据成员:与普通的成员函数和数据成员不同, 静态成员函数和静态数据成员有 ...
- C++类中的常数据成员和静态数据成员的区别
刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员 常数据成员是指在类中定义的不能修 ...
- 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)
目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...
随机推荐
- [hdu5113]Black And White2014北京赛区现场赛B题(搜索加剪枝)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Black And White Time Limit: 2000/2000 MS ...
- shell中的数学运算
shell中要进行数学运算通常有3中方法: expr命令 比如 expr 1 + 6就会返回7,使用expr的缺点就是碰到乘法运算,或者加括号(因为它们在shell中有其他意义),需要使用转义,比如: ...
- [ofbiz]less-than (<) and greater-than (>) symbols
问题描述: In field [updateItemStr] less-than (<) and greater-than (>) symbols are not allowed 此处的f ...
- 转:ProGuard 常见命令备份
转: https://my.oschina.net/sunyh/blog/30359 #-dontshrink #不压缩,减少jar的大小一般都压缩掉,为了增加反编译的难度也可以不压缩 #-donto ...
- vi打开二进制文件
vi -b filename <c7><cc>><0b><00><00><01><01><c2>& ...
- re模块
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能 ...
- numpy库:常用基本
numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...
- 关于hibernate非主键多对一关联
一直以来,用hibernate做多对一时,关联的都是主键,今天,同事设计的表,关联的却不是主键,这下麻烦了,hibernate的many-to-one默认关联的都是主键,原来,hibernate提供了 ...
- 直接地址跳转C实现
<C缺陷和陷阱>讲过的一种方法: ( *( void (*)() ) 0 )(); //跳转到0地址执行 解析: 1.void (*p_fun)(void); //声明函数指针 2.voi ...
- DOS命令行 定时关机&取消定时关机
命令行关机命令----shutdown Windows XP的关机是由Shutdown.exe程序来控制的,位于Windows\System32文件夹中. 如果你输入"shutd ...