Java线程中的Thread类的 sleep() 方法和Object类中的 wait() 方法的区别?

java.lang包下Thread类的 sleep(long millis) 方法:

  1. 该方法是一个静态方法,直接用Thread调用
  2. 该方法的作用是让调用该方法的线程睡眠指定的时间(单位:毫秒),参数中需要指定一个睡眠时间,过了该睡眠时间线程自然醒来,线程醒来是就绪状态,因此会和其它线程抢夺cpu执行时间
  3. 在线程睡眠期间,会释放当前线程的cpu使用权给其它线程 但是 不会释放锁
  4. 该方法会抛出 InterruptedException异常

 

java.lang包下Object类的wait(long timeout)、notify()、notifyAll() 方法:

  1. wait(long timeout)、notify()、notifyAll() 三个方法均是Object类提供的final修饰的普通方法,wait(long timeout)方法也可以让线程进入睡眠,该方法既可以指定睡眠时间(单位:毫秒),也可以不指定
  2. 如果为该方法指定了一个睡眠时间(单位:毫秒),那么当线程醒来没有获得cpu时间片段就会报错。因此我们常常不对该方法指定睡眠时间(单位:毫秒),如果不指定睡眠时间则需要调用notify()、notifyAll() 方法来唤醒线程
  3. wait(long timeout)方法在线程睡眠时会释放当前线程的cpu使用权给其它线程 并且 会释放锁
  4. wait(long timeout) 方法会抛出 InterruptedException 异常

你可能感兴趣的:(Java线程中的Thread类的 sleep() 方法和Object类中的 wait() 方法的区别?)