wait()与sleep()区别

  • wait()属于Object对象,sleep()属于Thread对象;
  • wait会释放锁,sleep不会释放锁;
  • 使用范围不同,wait必须使用在同步代码块中,sleep可以用在任何地方
  • wait需要被唤醒(唤醒:notify、notifyall),sleep不需要

    Synchronized与Lock区别

  • synchronized Java内置关键字,Lock是一个Java类

  • Synchronized无法判断获取锁的状态,Lock可以判断是否是否获到了锁
  • synchronized会自动释放锁,Lock必须释放锁,如果不释放锁,死锁
  • synchronized 线程1(获得锁,阻塞)、线程2(等待,一直等);Lock锁可以使用tryLock()尝试获取锁
  • synchronized 可重入锁,不可中断,非公平;Lock 可重入锁,可以判断锁,非公平(可设置)
  • synchronized 适合锁少量的代码同步问题,Lock适合锁大量的同步代码

    阻塞队列

    | 方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 超时 等待 | | —- | —- | —- | —- | —- | | 添加 | add | offer | put | offer | | 删除 | remove | poll | take | poll | | 检查队首元素 | element | peek | - | - |