`
xitong
  • 浏览: 6186358 次
文章分类
社区版块
存档分类
最新评论

静态变量的线程问题。

 
阅读更多

其中askedCount 是静态变量,多线程访问导致askedCount 结果不对,因为静态变量再被多个线程修改时其实是修改的同一个变量

导致 在返回前值被修改。

改正方式是 把askedCount 声明成静态变量。

public static Long getAskedCount() {



String beginTime;
Date beginDate = new Date();
askedCount = -1L;


if (GameDynamicElement.getAskTime() != null) {
SimpleDateFormat df = null;
df = new SimpleDateFormat("yyyy-MM-dd");
beginTime = df.format(new Date());
beginTime = beginTime + " " + GameDynamicElement.getAskTime();
} else {
beginTime = null;
}


if (StringUtils.isNotEmpty(beginTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
beginDate = sdf.parse(beginTime);
} catch (ParseException e) {
e.printStackTrace();
}
// 时差
askedCount = System.currentTimeMillis() - beginDate.getTime();


if (askedCount > 0) {


askedCount = (askedCount / (GameDynamicElement.getSpaceTime() * 1000)) + 1;
}
}
return askedCount;
}
分享到:
评论

相关推荐

    g++中的局部静态变量的初始化机制及线程安全

    g++中的局部静态变量的初始化机制及线程安全

    Qt 多线程访问同一个变量

    1.Qt下,多线程使用互斥锁安全访问同一全局变量;2.源码中定义了ThreadA和ThreadB,定义变量后,依次调用函数start()来启动重写的run()函数

    C++非静态成员函数完全可以作为线程函数

    一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...

    关于inet_ntoa返回的值是静态变量

    关于inet_ntoa返回的值是静态变量

    线程特定数据linux

    在单线程中,函数经常使用全局变量或是静态变量,但是如果线程调用的函数使用全局变量或是静态变量,很可能引起变成错误。。。

    c++多线程的创建挂起执行与销毁

    4. 新增一个静态的全局变量,用于记录所有线程的状态:static int GlobalVar=10000; 5. 声明并编写线程函数,注意只能有一个参数,且函数的返回值类型也是固定的;函数名可以自定义; DWORD WINAPI ThreadFun(LPVOID...

    C#线程锁介绍源码

    只有可以被多线程访问的共享资源才需要考虑锁定,比如静态变量,再比如某些缓存中的值,而属于线程内部的变量不需要锁定。 2)多使用lock,少用Mutex 如果你一定要使用锁定,请尽量不要使用内核模块的锁定机制,...

    java线程详解

    Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过现象看本质 Java线程:大...

    g729a 支持多线程

    历时两天,把G729A的算法封装成类,所有全局变量、静态变量都封到类中,完美支持多线程。绝对难得。

    Linux C 多线程编程之互斥锁与条件变量实例详解

    在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init. 对于动态分配的互斥量, 在申请...

    多线程快速入门.zip

    多线程快速入门 多线程之间通讯当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。

    JAVA笔记.zip

    静态变量 实例化前初始化 类装载时分配空间 多个对象共享同一内存空间 不能被垃圾收集线程收集 静态代码块 装载时运行 在main 之前 只运行一次 下次类再装载或创建对象时不运行 静态方法 类名调用(推荐...

    Thread实现两个线程打印0-10

    继承Thread类 1 实现Runable接口 2 继承Thread类: 3 必须重写run 方法:里面放置的实际的线程体 4 启动线程: 5 创建Thread对象 6 调用Thread对象的start 方法启动线程 7 在子类中定义static静态变量实现资源共享

    Linux系统编程之线程同步

    当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B阻塞。C线程不去加锁,而直接访问该全局变量,依然能够访问,但会出现数据混乱。 所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同...

    CreateThread创建多线程与单线程比较

    注意,工作者线程的函数必须是全局函数或静态成员函数,不能是普通的成员函数。 第二种CreateThread()函数原型为:HANDLECreateThread( NULL, // 没有安全描述符 0, // 默认线程栈的大小 MyThreadProc, // 线程函数...

    Linux中的线程局部存储(1)

    在Linux系统中使用C/C++进行多线程编程时,我们遇到多的是对同一...  在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,其不存在线程安全问题,因此不在本文讨论的范围之内。全局变

    Linux线程管理必备:解析互斥量与条件变量的详解

    而互斥量与条件变量在线程管理中必不可少,任务间的调度几乎都是由互斥量与条件变量控制。互斥量的实现与进程中的信号量(无名信号量)是类似的,当然,信号量也可以用于线程,区别在于初始化的时候,其本质都是P/V...

    作业2:进程和线程的比较1

    线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,但是每个线程拥有自己的栈段,而进程之间的通信需要以通信的方式进行。进程是具有一定独立功能的程

    Linux线程管理必备:互斥量与条件变量

    而互斥量与条件变量在线程管理中必不可少,任务间的调度几乎都是由互斥量与条件变量控制。互斥量的实现与进程中的信号量(无名信号量)是类似的,当然,信号量也可以用于线程,区别在于初始化的时候,其本质都是P/V...

    多线程实现的Java爬虫程序

    以下是一个Java爬虫程序,它能从指定主页开始,按照指定的深度抓取该站点域名下的网页并维护简单索引。  参数:private static int...  本程序用到了多线程(静态变量和同步),泛型,文件操作,URL类和连接,Hashtabl

Global site tag (gtag.js) - Google Analytics