要对监控器中的数据成员进行访问,在考虑到多线程的情况下必须使用同步代码块来改变监控器中数据成员的值:

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 方式实现监控器中数据成员的同步的更多相关文章

  1. YTU 2618: B 求类中数据成员的最大值-类模板

    2618: B 求类中数据成员的最大值-类模板 时间限制: 1 Sec  内存限制: 128 MB 提交: 430  解决: 300 题目描述 声明一个类模板,类模板中有三个相同类型的数据成员,有一函 ...

  2. C++中默认构造函数中数据成员的初始化

    构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...

  3. C++中常量成员函数的含义

    C++中常量成员函数的含义 本文内容来源:<C++必知必会> 使用常量成员函数可以改变对象的逻辑状态,虽然对象的物理状态没有发生改变.考虑如下代码,它定义了一个类X: class X{ p ...

  4. union中的成员不能有构造函数

    最近在做项目的CTA测试,快被折腾死了..... -_- 项目中用到的开源库AllJoyn在编译时报错: In file included :, , , , , , , : ./Target/:: e ...

  5. C++中的static数据成员与static成员函数

    本文要点: 1.static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联! aka:每个static数据成 ...

  6. C++类中的static数据成员,static成员函数

    C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...

  7. C++中static修饰的静态成员函数、静态数据成员

    1.静态成员函数.静态数据成员 在类中,用static修饰的成员函数被称为静态成员函数,而用static修饰的数据成员就称为静态数据成员:与普通的成员函数和数据成员不同, 静态成员函数和静态数据成员有 ...

  8. C++类中的常数据成员和静态数据成员的区别

    刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员 常数据成员是指在类中定义的不能修 ...

  9. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

随机推荐

  1. 内存管理pbuf.h头文件源码解析——LwIP学习

    声明:个人所写所有博客均为自己在学习中的记录与感想,或为在学习中总结他人学习成果,但因本人才疏学浅,如果大家在阅读过程中发现错误,欢迎大家指正. LwIP的内核(core文件夹)文件中pbuf.c是包 ...

  2. codeforces 340E Iahub and Permutations(错排or容斥)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Iahub and Permutations Iahub is so happy ...

  3. hdu3998 Sequence(最大流,LIS)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Sequence Time Limit: 2000/1000 MS (Java/O ...

  4. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

  5. Ext4报错Uncaught Ext.Loader is not enabled

    提示: Uncaught Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing requ ...

  6. 基于新唐M0的XXTEA加密解密算法源码

    /*-------------------------------------------------------------------------------------------------- ...

  7. jQuery插件之validate

    一.jQuery.validate.js插件用于对表单输入进行验证,其使用配置非常简单.支持多事件触发,自带多种验证规则,还支持自定义验证规则. 1.配置方法. 先导入jQuery库,然后导入Vali ...

  8. Unattended Setup Software Components (无人值守安装软件组件)

    原文 http://social.technet.microsoft.com/Forums/windows/en-US/d4ad85b4-8342-4401-83ed-45cefa814ec5/una ...

  9. python实现词法分析

    #请先安装Ply # -*- coding: utf-8 -*- #------------------------------------------------------------------ ...

  10. LRU Cache 解答

    Question Design and implement a data structure for Least Recently Used (LRU) cache. It should suppor ...