首页 > 试题广场 >

下列关于java 中的 wait()方法和 sleep()方

[单选题]
下列关于java 中的 wait()方法和 sleep()方法的区别描述错误的是?
  • wait()方法属于Object类,sleep()属于Thread类
  • 调用wait()方法的时候,线程会放弃对象锁
  • 调用sleep()方法的过程中,线程不会释放对象锁
  • sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程
sleep不会让出cpu资源
发表于 2015-07-07 20:58:43 回复(2)
wait()
  1. wait()  method releases the lock.
  2. wait()  is the method of  Object  class.
  3. wait()  is the non-static method.
  4. wait()  should be notified by  notify()  or  notifyAll()  methods.
sleep()
  1. sleep()  method doesn't release the lock.
  2. sleep()  is the method of  Thread  class.
  3. sleep()  is the static method.
  4. after the specified amount of time,  sleep()  is completed.
发表于 2017-04-29 20:36:02 回复(0)
sleep和wait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
编辑于 2025-05-18 22:31:35 回复(25)
这里的程序可以理解成进程。D就是sleep()方法导致进程停止指定时间按
发表于 2017-03-19 13:26:50 回复(0)
我只想知道D为什么不对,睡眠 != 暂停?(我无言以对)没出让cpu?那其他cpu岂不是都挂了?求解。
发表于 2015-09-23 23:12:05 回复(1)
D.wait()方法属于Object类,Sleep()属于Thread类;wait()方***释放锁对象,sleep()方法不会释放锁对象;sleep()方***使该线程休眠一段时间,不是让程序暂停一段时间

发表于 2015-08-10 11:56:27 回复(0)
D  sleep不会让出cpu资源给其他线程
发表于 2015-05-15 11:21:16 回复(0)
sleep()睡眠时,保持对象锁,仍然占有该锁;
而wait()睡眠时,释放对象锁。
发表于 2014-12-11 13:46:34 回复(0)
D
    是线程暂停执行指定时间而不是程序暂停执行指定的时间。
发表于 2015-03-31 18:48:49 回复(15)

、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。


2、 最主要sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源敏感词线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待敏感词线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。


3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 
   synchronized(x){ 
      x.notify() 
     //或者wait() 
   }


4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

发表于 2014-11-04 09:30:33 回复(5)
Sleep就是线程占着CPU去睡觉!
发表于 2016-08-27 19:52:34 回复(3)
不懂的能不能不要随意发表评论。会让很多人混淆的
发表于 2016-08-22 17:40:47 回复(2)
1.sleep来自Thread,而wait来自Object
2.wait()是用于线程间通信的,sleep() 是用于短时间暂停当前线程,当一个线程调用wait()方法时,会释放它锁持有的对象的管程和锁,但是强调sleep()方法的时候,不会释放他锁持有的的管程
3.wait必须在同步代码块中调用,但是sleep不需要
4.sleep是一个静态方法,作用当前线程上,但是wait方法是一个实例方法,并且只能在其他线程调用本实例的notify方法时被唤醒。
5.使用sleep方法时,被暂停的线程在被唤醒之后会立即进入就绪态(Runnable state),但是使用wait方法的时候,被暂停的线程会首先获得锁(阻塞态),然后再进入就绪态。

发表于 2018-08-25 10:00:05 回复(0)
sleep() 方法 :sleep() 允许 指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间
内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。
我觉得D错在了是线程暂停执行指定的时间,而不是程序。至于说,CPU,调用sleep()方法之后,确实让出去了。
欢迎大牛指正
发表于 2016-10-10 19:31:46 回复(0)

1、使用上从使用角度看

      sleep是Thread线程类的方法,而wait是Object顶级类的方法。

     sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用。

2、CPU及资源锁释放

        sleep,wait调用后都会暂停当前线程并让出cpu的执行时间,
        但不同的是sleep不会释放当前持有的对象的锁资源,到时间后会继续执行,
        而wait会放弃所有锁并需要notify/notifyAll后重新获取到对象锁资源后才能继续执行。

3、异常捕获

        sleep需要捕获或者抛出异常,而wait/notify/notifyAll不需要。

发表于 2019-03-07 19:38:01 回复(0)
1 sleep是Thread线程类的方法,而wait是Object顶级类的方法
2 sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用
3 sleep,wait调用后都会暂停当前线程并让出cpu的执行时间,但不同的是sleep不会释放当前持有的对象的锁资源,到时间后会继续执行,而wait会放弃所有锁并需要notify/notifyAll后重新获取到对象锁资源后才能继续执行
4 sleep需要捕获或者抛出异常,而wait/notify/notifyAll不需要
发表于 2019-04-25 09:27:08 回复(0)
sleep是Thread中的方法,而wait是object对象中的方法,因此所有的对象都会有wait方法。sleep方法是不会释放对象锁的,因此此时其他排队获得该对象的线程依然排队,但是该方***让出CPU给其他线程(不需要获得该对象锁的线程)执行。而wait方***使获得当前对象锁的线程挂起,调用notify()或者notifyAll()会唤醒一个排队中的线程获得当前该对象的对象锁。
发表于 2016-05-19 21:41:26 回复(0)
总结别人的,仅记录 sleep和wait的区别。 1,继承自不同的类,Thread和Object 2,sleep不释放对象锁,wait释放 3,sleep可以在任何地方使用,wait只能在同步块中使用。 4,sleep捕获异常
发表于 2017-09-26 08:33:07 回复(0)
D 是 yield() 方法的作用;
发表于 2016-10-06 20:54:06 回复(0)
d不应该是程序暂停执行,是线程暂停执行
发表于 2025-02-16 05:12:22 回复(0)