zoukankan      html  css  js  c++  java
  • [多线程]线程基础(对象锁、class锁、同步、异步)

    synchronized、volatile、ReentrantLock、concurrent

    线程安全:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的

    synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互拆区”或“临界区”

    锁竟争:要尽量避免(会消耗CPU资源)

    class锁和对象锁:多线程多对象则会产生多个锁(一个对象一个锁),采用static synchronized修饰可避免多个锁(class锁无论N个对象均产生一个锁)

    同步和异步:

                        一个类两个方法(一个同步方法,一个异步方法);两个线程访问同时分别访问一个对象的同步方法和异步方法,执行异步方法无需等待同步方法执行完后;

                        一个类两个方法(两个均为同步方法);两个线程访问同时分别访问一个对象的两个同步方法,执行同步方法必须等待先执行的同步方法执行完后;

    synchronized锁重入:同步方法调用同步方法、父类同步方法调用子类同步方法

    synchronized代码块:注意synchronized代码块的锁,要避免用户字符串常量

    volatile概念:

          修饰变量,主要作用是使变量在多个线程间可见(实现主内存和线程工作内存可见)

          性能比synchronized强很多,不会造成阻塞;

          volatile关键字非原子性(不具备同步性);只具有可见性没有原子性(要实现原子性建议使用atomic类系列对象);

          在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。

           

  • 相关阅读:
    [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
    [学习笔记] CDQ分治&整体二分
    [日常] NOIp 2018 滚粗记
    [学习笔记] 模拟退火 (Simulated Annealing)
    [日常] NOIWC 2018爆零记
    [日常] PKUWC 2018爆零记
    [日常] 最近的一些破事w...
    [BZOJ 1877][SDOI2009]晨跑
    [COGS 2583]南极科考旅行
    [日常] NOIP 2017滚粗记
  • 原文地址:https://www.cnblogs.com/boazy/p/7643716.html
Copyright © 2011-2022 走看看