怎么样做到线程安全?
来源:互联网 发布:接单平台源码 编辑:程序博客网 时间:2024/04/29 21:54
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。
在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;
而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。
那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。
如何做到线程安全:
四种方式 sychronized关键字
1. sychronized method(){}
2. sychronized (objectReference) {/*block*/}
3. static synchronized method(){}
4. sychronized(classname.class)
其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁。要注意的是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronized,那么只要有两个线程共享一个该类的reference,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。
注意:long 和double是简单类型中两个特殊的咚咚:java读他们要读两次,所以需要同步。
- 怎么样做到线程安全?
- 如何做到java线程安全
- 如何做到java线程安全
- 开发者怎么样做到盈利
- 开发者怎么样做到盈利
- Item 16: 让const成员函数做到线程安全
- 在ASP编程中,身份认证可以说是常要用到的。但怎么样才能做到认证的安全呢?
- 努力做到异常安全
- java中volatile关键字的含义--volatile并不能做到线程安全
- C++中怎么样可以做到让一个函数最后执行
- 怎么样终止一个线程呢?
- C# 利用socekt做到http监听,怎么样才能做到高性能
- C# 利用socekt做到http监听,怎么样才能做到高性能
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 虚拟机下安装Fedora12图形界面不显示的问题
- 分享一个励志的文章网站
- 来自微软研究院--Excel2007Web数据工具
- Eclipse+Qt4配置步骤(Linux版)
- 多组织,法人实体(legal entity),业务实体(OU)
- 怎么样做到线程安全?
- 4.1.2 ISO/OSI模型
- 客户的一封来信
- 创建win32透明窗体
- ArcIMS Admin启动时出现Site restoration pending on server.Try again解决
- 4.1.3 TCP/IP模型
- 使用libparted库写个程序来打印我们的设备信息
- 解决品牌机、笔记本 安装GhostXP问题的终极方法
- 4.2 网络接口配置的基本内容