Java 并发编程学习(一):并发编程相关概念
什么是线程安全性?
当多个线程访问一个类时(例如执行对象的方法),这个类始终都能表现出正确、预期内的行为,那么可以称这个类是线程安全的。
什么是原子性?
如果对于某个操作或者某组操作,A线程在执行时,B线程看见A的执行状态为:A没执行或者A已经执行完了。满足这个条件的操作可以称为原子操作。
什么是竞态条件?
在并发编程中,由于不恰当的执行时序而出现不正确的结果,称为存在竞态条件。一种典型的竞态条件就是“先检查后执行”。在多线程并发的情况下,对共享变量进行先检查后执行的操作通常存在线程安全问题,出现问题的原因在于,检查时满足条件,而执行的时候条件已经不满足了。还有一种常见的竞态条件是:依据对象之前的状态来定义对象状态的转换,比如所对++i操作实际上是分三步来执行,Load i、i+1、Store i。可以发现,这两种竞态条件实际上都是因为操作不是原子性的。
什么时候需要考虑使用同步机制?
当程序逻辑存在被多个线程同时访问,并且逻辑中使用了共享的、可变的对象(不单指Java类实例,可以是一切变量)时,需要考虑使用同步机制保证并发时的正确性。