zoukankan      html  css  js  c++  java
  • 什么是线程的同步,线程的同步要注意什么?

    根据一篇文章,精简了一下关于线程同步的知识

    什么是线程同步,为什么要同步
    1. 线程同步=线程排队
    2. 多个线程访问共享的资源才需要同步
    3. 多个线程读取常量不用同步,读取变量才要同步,即涉及线程要要对数据修改才同步
    4. 多个线程访问共享资源的代码有可能是同一份代码,也有可能是不同的代码;无论是否执行同一份代码,只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。
    如何线程同步
    1. 给共享资源的访问加同步锁(注意,为什么不是在每个对象里添加锁机制?没必要,因为同步是很耗资源的)
    2. 同步锁是加在访问共享资源的代码段上的
    3. 如果访问同一份共享资源,加的是不同的同步锁,并不起到同步的作用,且该同步锁没有任何意义,也就是关键要判断该锁是否是同一同步锁
    4. 也就是说,同步锁本身也一定是多个线程之间的共享对象
    5. 如函数体内部产生的同步锁,对于多线程不是同一个同步锁(具体看例子)
    6. 任何一个Object Reference都可以作为同步锁
    7. 是否是同一个同步锁,也就是看同步代码间,synchronized关键字是否使用同一个Object Reference,即同一个内存地址
    8. 可以使用类的static final的属性对象作同步锁,使用final就是为了保证引用不要改变,保证同一个同步锁
    9. 由于同步的范围越小越好,同步的代码块越少越好,所以不同的共享资源,要使用不同的同步锁,即缩小同步粒度

  • 相关阅读:
    spark性能调优 数据倾斜 内存不足 oom解决办法
    python2的中文编码
    spark UDF函数
    spark cache table
    spark 创建稀疏向量和矩阵
    mysql 分组排序
    给pyspark 设置新的环境
    CF662C Binary Table
    bzoj 4310 跳蚤
    3.29省选模拟赛 除法与取模 dp+组合计数
  • 原文地址:https://www.cnblogs.com/jianglong-liang/p/3330862.html
Copyright © 2011-2022 走看看