摘自:http://www.oschina.net/code/snippet_347813_125251. 代码:DbContextHolderpublic
class DbContextHolder { //线程安全的ThreadLocal private static final T...
分类:
编程语言 时间:
2014-05-26 22:22:46
阅读次数:
400
最近看到这篇文章dotNetDR_的回复,让我想起一个真实发生的案例,下面就简单说说这个关于lock引用类型的一个不容易发现的隐藏缺陷。某类库中的代码,封装了很简单的一个通用类,用于线程安全地执行某一种类型的特定方法,几行代码搞定:
public class ConcurrentObjectE...
分类:
其他好文 时间:
2014-05-26 14:01:09
阅读次数:
221
java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同《java并发编程实践》中所说:写道给线程安全下定义比较困难。存在很多种定义,如:“一个类在可以被多个线程安全调用时就是线程安全的”。
静态变量:线程非安全。静态变量即类变量,位于方法区,为所有对...
分类:
编程语言 时间:
2014-05-26 13:30:48
阅读次数:
467
对于某些类,我们需要保证系统中只能有一个实例,这种类的设计用到singleton模式模式。单线程的singleton模式是
straightforward的,下面给出Java和C++11的线程安全singleton实现Java:public class Singleton
{ private sta...
分类:
编程语言 时间:
2014-05-26 11:03:20
阅读次数:
182
一、什么是线程安全性
编写线程安全的代码
核心在于要对状态访问操作进行管理。
共享,可变的状态的访问 - 前者表示多个线程访问, 后者声明周期内发生改变.
线程安全性
核心概念是正确性。某个类的行为与其规范完全一致。
多个线程同时操作共享的变量,造成线程安全性问题。
* 编写线程安全性代码的三种方法:
不在线程之间共享该状态变量
将状态变量修改为不可变的变量
在访问...
分类:
编程语言 时间:
2014-05-26 05:31:40
阅读次数:
282
一、可见性
什么是可见性?
Java线程安全需要防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且需要确保当一个线程修改了对象的状态后,其他线程可以看到发生的状态变化。 后者就是可见性的描述即多线程可以实时获取其他线程修改后的状态。
*** 待补充 两个工人同时记录生产产品总数问题
1. 失效数据
可见性出现问题就是其他线程没有获取到修改后的状态,更直观...
分类:
编程语言 时间:
2014-05-24 22:17:11
阅读次数:
246
DLL有个共同的特点就是都有一个初始化函数,一个资源释放函数,其他几个函数都是核心功能函数。而且这些DLL有时会被多个进程同时调用,这就牵扯到多进程的多线程调用DLL的问题。有点绕口,以下我根据我实践中遇到的问题,分四种情况分享一下我解决此类问题的经验:1、动态库只有一个导出函数。这种情况非常少,也...
分类:
编程语言 时间:
2014-05-23 05:36:08
阅读次数:
280
什么是线程安全?给一段线程不安全的代码分析指某个函数
、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成。
一般来说,线程安全的函数应该为每个调用它的线程分配专门的空间,来储存需要单独保存的状态,不依赖于“线程惯性”,把多个线程共享的变量正确对待,而且,线程安全的函...
分类:
编程语言 时间:
2014-05-22 01:19:02
阅读次数:
417
Writing Reentrant and Thread-Safe
Code编写可重入和线程安全的代码(http://www.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/aixprggd/genprogc/writing_re...
分类:
编程语言 时间:
2014-05-21 21:30:30
阅读次数:
434
Subsections
线程安全(Thread safety)
锁(lock)
共享对象
对象组合
基础构建模块
任务执行
取消和关闭
线程池的使用
性能与可伸缩性
并发程序的测试
显示锁
原子变量和非阻塞同步机制
一、线程安全(Thread safety)
无论何时,只要多于一个线程访问给定的状态变量。而且其中某个线程会写入该变量,此时必须使用同...
分类:
编程语言 时间:
2014-05-21 17:11:45
阅读次数:
500