并发环境下wait与sleep的区别

1、归属问题

  • sleep是Thread类的静态方法
  • 而wait是object的成员方法

2、唤醒问题

  • 执行 sleep(long) 和 wait(long) 的线程都会在等待相应毫秒后醒来
  • wait(long)/wait()可以被notify()/notifyAll()唤醒,但sleep(long)只会等待时间结束

3、锁释放问题

  • wait 方法的调用必须先获取 wait 对象的锁,而 sleep 则无此限制
  • wait 方法执行后会释放对象锁,允许其它线程获得该对象锁(我放弃 cpu,但你们还可以用) 
  • 而 sleep 如果在 synchronized 代码块中执行,并不会释放对象锁(我放弃 cpu,你们也用不了)

你可能感兴趣的:(java,数据库)