用户工具


synchronized

  • 作用
    • 多个线程依次执行某个代码块(串行执行),一个线程执行完后,通知其他线程继续执行

wait

  • 作用
    • 暂停一个线程
    • 会释放持有的锁(释放调用wait的那个锁。如果还拥有其他锁,则不会释放)
  • 特点
    • 面向object
    • 使用不灵活,只能notify任意一个线程,或者所有线程
    • wait必须先于notify/notifyAll之前调用。(否则就会错过信号)
  • 退出方式
    • notify
    • interrupt

park

  • 作用
    • 暂停一个线程
  • 特点
    • 面向线程
    • 使用灵活,可以对任意一个线程进行park(),unpark()操作
    • unpark可以先于park之前调用
      • unpark将信号量设置成1(可用),park将信号量设置成0(不可用)
      • 所以连续多次调用unpark其实没有效果
    • 可以设置正在等待的对象(有利于排查问题)
  • 退出方式
    • unpark
    • interrupt

LockSupport.parkNanos(10); 注意,这里park 10纳秒,实际上park操作本身就消耗了50000纳秒,所以park(10),park(100),park(1000)性能其实差不了多少

sleep

  • 作用
    • 睡眠
    • 不会释放持有的锁
  • 退出方式
    • interrupt

join

  • 作用thread2.join() 等待线程thread2退出
    • 底层就是wait机制

yield

建议让出cpu(可能并不会让出)。程序中不能强依赖这种不确定性的逻辑