首页 > 试题广场 >

sleep( ) 和 wait( ) 有什么...

[问答题]

sleep( ) 和 wait( ) 有什么区别? 

1、sleep( ) 属于Thread类,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时候会自动恢复。调用sleep不会释放对象锁。

wait( )属于Object类,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出的notify方法或notifyAll后,本线程才进入对象锁定池准备获得对象锁进入运行状态。

2、sleep方法需要抛异常,wait方法不需要

3、sleep方法可以在任何地方使用,wait方法只能在同步方法和同步代码块中使用

发表于 2019-06-18 17:53:17 回复(0)

1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);

2、sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;

3、sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()是Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;


发表于 2019-06-08 10:29:57 回复(1)
wait不是获得锁后进入就绪状态?
发表于 2019-07-05 15:53:12 回复(0)
sleep()是Thread的方法,导致此线程暂停执行指定时间,但监控状态继续保持,到时自动恢复,不会释放对象锁
wait()是Object类中的方法,会导致本线程放弃对象锁,进入等待此对象的锁定池,只有notify或notifyall方法后才能从等待状态进入运行状态
发表于 2019-06-29 14:53:23 回复(0)
1.wait()方法属于Object类,sleep()方法属于Thread类;
2.调用wait()方法的时候线程会放弃对象锁,需要被重新唤醒,调用sleep()方法的时候不会;


发表于 2019-06-20 20:12:45 回复(0)