线程安全性

2018-07-19  本文已影响0人  孤尘F

1.概述

编写线程安全的代码其核心点在于对于状态访问操作进行管理,特别是对于共享的、可变的状态的访问

2.线程安全性

当多个线程访问一个类时,不管运行环境采用何种调度方式或者多个线程之间以何种时许来进行交替执行,并且在主调代码中不需要采用任何协同和同步机制,这个类都能表现出正确的行为,那么这个类就行线程安全的
无状态的类一定是线程安全的

3.竟态条件

当某个计算的正确性取决于多个线程交替执行的时许时,那么就会发生竟态条件
对于一个或者一组变量的操作(读和写)必须保证原子性才能有效的避免竟态条件

4.Java内置锁-synchronized

5.活跃性与性能

安全性一定是第一位的,在保证线程安全的前提下,可以将锁的粒度尽量细化,以提高程序性能(当然这并不是绝对的,比如一种情况,在大量的for循环中,一定要在for循环外面获取锁,而不是每次循环中获取锁,这种称之为锁膨胀)

当执行时间较长的计算或者无法快速完成的操作时(如王磊I/O或者控制台I/O),一定不要持有锁

上一篇 下一篇

猜你喜欢

热点阅读