博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程之并发访问
阅读量:5836 次
发布时间:2019-06-18

本文共 1347 字,大约阅读时间需要 4 分钟。

hot3.png

    1. “非线程安全”问题存在于"实例变量"中,方法内的变量为线程安全。

    2.   关键字synchronized 取得的锁都是对象锁。

    3.   如果多个线程访问多个对象,则JVM会创建多个锁。

    4.    A线程先持有object对象的Lock锁,B线程可以异步的方式调用object对象中的非synchronized类型的方法。

    5.     A线程先持有object对象的Lock锁,B线程如果在这时候调用object对象中的synchronized类型的方法,则需要同步。

    6.    synchronized锁重入:在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象锁时是可以再次得到该对象的锁的。这也说明,在一个synchronized方法\块的内部调用本类的其他synchronized方法\块时,是永远可以得到锁的。

    7.    可重入锁也支持在父子类继承的环境中。

    8.    当存在父子类继承关系时,子类是完全可以通过"可重入锁"调用父类的同步方法的。

    9.    当出现异常时,锁自动释放。

    10.    同步不具有继承性。

    11.    synchronized同步语句块:synchronized 同步方法在某些情况下有弊端,在这种情况下,可以使用synchronized同步语句块来解决。

    12.     synchronized(this) 使用的"对象监视器"是一个。

    13.    synchronized还可以用在static静态方法上,那是对*.java对应的Class类进行加锁。

    14.   

    15.    synchronized代码块通常情况下不适用String作为锁对象,因为String常量池带来的问题。

    16.    volatile:主要作用是使变量在多个线程间可见。它强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。

    17.    volatile变量不支持原子性。

    18.     synchronized vs volatile

  • volatile是线程同步的轻量级实现,所以性能优于synchronized,并且volatile只能适用于修饰变量,而synchronized可以修饰方法,代码块。
  • 多线程访问volatile不会发生阻塞,而synchronized会发生阻塞。
  • volatile能保证数据的可见性,但不能保证原子性;synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步。
  • volatile解决的是变量在多个线程中的可见性,而synchronized解决的是多线程之间资源的同步性。

    19.    变量在内存中工作过程:

    

        read和load阶段:从主存复制变量到当前线程工作内存;

        use和asign阶段:执行代码,改变共享变量值;

        store和write阶段:用工作内存数据刷新主对应变量的值;

    20.    AtomicInteger, AtomicLong   原子类。但是原子类在具有逻辑的情况下输出结果也具有随机性。

    21.    synchronized 代码块具有volatile同步的功能,synchronized可以使具有可视性

转载于:https://my.oschina.net/u/2319418/blog/1615056

你可能感兴趣的文章
《众妙之门——网页设计专业之道》——1.3 传统印刷设计的影响
查看>>
怎样使用linux的iptables工具进行网络共享
查看>>
《HTML5与CSS3实战指南》——导读
查看>>
Cisco交换机 正确连接和初级配置
查看>>
CSS3笔记-如何建立一个半透明层
查看>>
html5 地理定位 008
查看>>
三天熟练掌握HTML5和CSS3
查看>>
[复习] grep、sed、awk练习题(二)
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
ES6 系列之 Babel 将 Generator 编译成了什么样子
查看>>
Apache错误日志详解
查看>>
动态查看对Memcache的使用
查看>>
整理时下流行的浏览器User-Agent大全
查看>>
Oracle中的Sql语句
查看>>
RESTFul
查看>>
一个简单的定位sql语句性能问题的实例
查看>>
win10更新后 chrome内核浏览器打开网页一直加载,显示正在创建安全连接 甚至打不开 解决方法...
查看>>
在centos中建立本地源的注意事项
查看>>
RHEL6下安装oracle 10g(一)
查看>>
Android 系统启动时自启动一个app
查看>>