1、什么是线程安全?
比如一个类被多个线程同时访问的时候能够表现出正确的行为我们称为线程安全的。
2、共享性
我们都知道在Java的内存模型中共享变量是提供给多给线程进行共享的一块内存区域。如果有多个线程同时修改此块内存区域的变量,那么就有可能发生不可预期的结果出现,各个线程各自保存一个共享变量的副本各自维护。
3、互斥性
在多线程情况下只允许一个线程同时对共享变量进行写操作,其他线程不允许写操作我们称为线程之间的互斥性。
4、原子性
对于一个共享变量的操作是一个整体、不可分割的一部分。共享变量不允许在一个线程操作一半被其他线程修改操作。如i++ 操作步骤 :1.获取值 2 .i值自增 3.将值写入主内存中,在这个过程有可能出现原子性不可预期的效果。
5、可见性
共享变量对多个线程是可见的,多个线程拥有此共享变量的一个复制的副本。可以使用volitale 关键字进行修改,说明对于每次修改共享变量,其他线程会立即刷新主内存的变量到自己对应的副本。
网友评论