并发基本概念

来源:互联网 发布:贷款app源码 编辑:程序博客网 时间:2024/06/14 10:36

       遥想初来深圳的时候,用‘初生牛犊不怕虎’来形容自己毫不为过,面试时对于自己不是很懂的也是一通乱讲,现在还记得又一次面试,经理问我:“什么是线程安全”?说实话当时只知道用synchronized来进行同步保证线程安全,对其概念一无所知,so,在这里记录一下一些并发的基础概念,比如:线程安全、原子性、竞态条件、不可变对象等。

线程安全:通俗的讲当在多线程环境下访问某个类时,该类始终能表现出正确的行为,那么此类就是线程安全的。那么什么类能够始终表现出正确的行为呢?的确有:无状态的类。何为无状态?当一个类既不包含任何域,也不包含任何对其他类中域的引用,那么这个类就是无状态的。比如下面的例子,既不不含任何域,也不存在其他域的引用,只有一个方法,打印一句话,当然也可以有自己的属性,无论多少线程同时访问都不会出现任何问题:

public class Demo {        public void say(){           System.out.println("java is so easy!!");         } }

原 子 性如果有两个操作A、B,当一个行程执行A时,在A线程看来,另一个线程执行B,要么全部执行完,要么完全不执行B,那么A、B对彼此来说就是原子的。最典型的非原子操作:i++。大家都懂大笑

竞态条件当某个计算的正确性取决于多个线程的交替执行时序时就会发生竞态条件。最常见的例子:先检查后执行,比如判断某个对象是否为空,然后进行后续操作,在多线程环境下会导致各种问题。

不可变对象:当某个对象被创建后其状态就不能被修改,那么就可以称这个对象为不可变对象。不可变对象一定是线程安全的。对象不可变需要满足诸多条件,这个以后再说。

原创粉丝点击