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