7月13日

  1. sleep和wait
    1. 都是让当前现场展示放弃cpu的使用权,进入阻塞状态
    2. 方法归属
      1. sleep 是Thread的静态方法
      2. wait,wait(long)都是Object的成员方法,每个对象都有
    3. 醒来时机
      1. sleep和wait(long)都会在相对应的时间后醒来
      2. wait(long)和wait()还可以被notify唤醒,wait()不唤醒就一直等下去
      3. sleep可以使用interrupt方法打断睡眠
    1. 锁特性
      1. sleep方法的调用必须先获取wait对象的锁,sleep无此限制
      2. wait方法执行后会释放对象锁,允许其他现场获得该对象锁
      3. sleep如果在synchronized代码块中执行,并不会释放对象锁
  2. lock和synchronized
    1. 语法
      1. synchronized是关键字,源码在jvm中,使用c++实现
      2. lock是接口,源码由jdk提供,使用java语言实现
      3. 使用synchronized时,退出同步代码块会自动释放,lock需要使用unlock方法释放锁
    2. 功能
      1. 俩者都是悲观锁,都具备基本的互斥、同步、锁重入功能
      2. lock提供了许多synchronized不具备的功能,例如获取等待状态、公平锁、可打断、可超时、多条件变量
      3. lock 有适合不同场景的实现,入reentrantLock,ReentrantReadWriteLock
    3. 性能
      1. 没有竞争时,synchronized做了很多优化,如偏向锁,轻量级锁,性能不赖
      2. 竞争籍烈时,lock的实现通常会提供更好的性能
  3. volatile能都保证线程安全
    1. 可见性:一个线程对共享变量修改,另一个线程能看到最新的结果
    2. 有序性:一个线程内代码按编写顺序执行
    3. 原子性:一个线程内多行代码以一个整体运行,期间不能有其他线程的代码插队
    4. volatile能把保证可见性和有序性,不能保证原子性
 
posted @ 2022-07-15 14:39  hanukkah  阅读(68)  评论(0编辑  收藏  举报