并发编程基础

临界资源

临界资源是指一次只能被一个进程使用的共享资源。各进程之间采用互斥的方式,实现共享的资源称为临界资源。属于临界资源的硬件有打印机,磁带机等,软件有队列,变量,数组,缓冲区等。诸进程之间采用互斥的方式实现对这些资源的共享。

线程安全

基本概念

何为竞态条件

当两个线程竞争统一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称为临界区。

在临界区中使用适当的同步就可以避免竞态条件,如使用synchronize或者加锁机制。

何为线程安全

允许被多个线程执行的代码称为线程安全的代码。线程安全的代码不存在竞态条件。

对象的安全

局部基本类型变量

局部变量存储在线程自己的栈中。也就是说,局部变量永远不会被多个线程共享。所以,基本类型的局部变量是线程安全的。

局部的对象引用

对象的局部引用和基本类型的局部变量不太一样,尽管引用本身没用被共享,但引用所指向的对象并没有存储在线程的栈内。所有的对象都存在共享堆中。

如果在某个方法中创建的对象不会逃逸出(即该对象不会被其他方法获得,也不会被非局部变量引用到)该方法,那么它就是线程安全的。

实际上,哪怕将这个对象作为参数传递给其他方法,只要别的线程获取不到这个对象,那它就是线程安全的。

对象成员(成员变量)

对象成员存储在堆上。如果两个线程同时更新同一个对象的同一个成员,那这个代码就不是线程安全的。

不可变性

通过创建不可变的共享对象来保证对象在线程共享是不会被修改,从而实现线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值