首页 > 试题广场 >

请问JAVA线程操作中sleep()和wait()有什么区别

[问答题]
请问JAVA线程操作中sleep()和wait()有什么区别?
推荐
1. sleep是Thread类的方法,是线程用来 控制自身流程的。wait是Object类的方法,用来线程间的通      信,这个方***使当前拥有该对象锁的进程等待知道其他线程,主要是用于不同线程之间的调度的。
2. 每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同      步。sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 
3. wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 
4. sleep必须捕获异常,而wait不需要捕获异常 
编辑于 2015-01-09 10:41:09 回复(1)
1.sleep()使当前线程进入停滞状态,让出cpu的使用以供其他线程的使用;shleep()是Thread类的静态方法,在任何地方调用时,当休眠期满会自动苏醒,但线程不会立即执行;为此sleep()不能改变对象的机锁,当在synchronized中调用时,其他线程仍不能访问该对象。
2.wait()使该线程进入到和该对象相等的等待池中;wait()是Object类的一个方法,必须在synchronized中调用,wait()通过notify()、notifyAll()方法或者设置等待时间达到唤醒等待池中的线程;为此调用wait()方法时,该线程会暂时失去对象锁,wait(long timeOut)超时后还需返还。
发表于 2017-07-14 23:10:35 回复(0)
1.原理不同。sleep()方法是Thread类中的方法,是线程用来控制自身流程的,他会使线程暂停一段时间,而把执行机会留给其他线程,等到计时时间一到,此线程会自动"苏醒"。wait()方法是Object类中的方法,用于线程间进行通信,这个方***使当前拥有该对象锁的线程等待,直到其他线程调用notify()方法或者notifyAll()方法才“醒来”,同样也可以给他设置一个时间,自动“醒来”。
2.对锁的处理机制不同。sleep()方法的主要作用是让线程暂停执行一段时间,时间一到自动恢复,不涉及线程间的通信,因此,sleep()方法不会释放锁。wait()方法调用后会释放它使用的锁, 从而使线程所在对象中的同步数据可被其他线程使用。
3.使用区域不同。sleep()是Thread的静态方法,可以放在任何地方使用。wait()方法的使用必须放在同步方法或者同步代码块中。
发表于 2017-01-14 15:52:31 回复(0)