引用
说起java并发,首先会想到的估计就是线程,这两天因为项目里面有关于类似秒杀的功能,所以就回顾一下java线程的相关知识,首先说几个概念
原子性
原子操作,指的是该操作是不可分割的,如:a=1,但是a++就不是原子操作,因为该操作分成两步a=a+1,非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作,但是原子类可以保证,如下代码所示:
可见性
可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。
另外引用一篇文章讲的概念挺好: http://www.importnew.com/24082.html
原子性
原子操作,指的是该操作是不可分割的,如:a=1,但是a++就不是原子操作,因为该操作分成两步a=a+1,非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作,但是原子类可以保证,如下代码所示:
private AtomicLong count = new AtomicLong(0); public long getCount() { return count.get(); } public void add() { count.incrementAndGet(); }
可见性
可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。
另外引用一篇文章讲的概念挺好: http://www.importnew.com/24082.html