java并发编程基础--原子性及synchronized和volatile使用

一、原子性

1)什么是原子性?

     通俗的来说,原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

2)如何把非原子性操作变成原子性操作?

  • volatile关键字仅仅保证可见性,并不保证原子性
  • synchronize关键字,使得操作具有原子性

二、synchronize关键字使用场景

1)修饰普通方法:锁住对象实例

如:public synchronized void out1(){}

2)修饰静态方法:锁住整个类

如:public static synchronized void out2(){}

3)修饰代码块:锁住一个对象,synchronized (lock) 即synchronized后面括号里的内容 

如:public void out3(){

                 synchronized(对象){

        }

扫描二维码关注公众号,回复: 5453784 查看本文章

}

三、volatile关键字及其使用场景

1)解释:能且仅能修饰变量, 保证该变量的可见性,volatile关键字仅仅保证可见性,并不保证原子性

举例来说:A、B两个线程同时读取volatile关键字修饰的对象A读取之后,修改了变量的值,对B线程来说,修改后的值是可见

 2)使用场景
            1:作为线程开关
            2:单例,修饰对象实例,禁止指令重排序

猜你喜欢

转载自blog.csdn.net/qq_38966361/article/details/87645665