Java线程中sleep和wait的区别详细介绍

fly石小凯

fly石小凯

2016-02-19 11:45

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Java线程中sleep和wait的区别详细介绍吧。
Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。
共同点
1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。
2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。
如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。
需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。
不同点
1.Thread类的方法:sleep(),yield()等
Object的方法:wait()和notify()等
2.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。
sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
线程的调度
线程调度器按线程的优先级高低选择高优先级线程(进入运行中状态)执行,同时线程调度是抢先式调度,即如果在当前线程执行过程中,一个更高优先级的线程进入可运行状态,则这个线程立即被调度执行。
抢先式调度又分为:时间片方式和独占方式。在时间片方式下,当前活动线程执行完当前时间片后,如果有其他处于就绪状态的相同优先级的线程,系统会将执行权交给其他就绪态的同优先级线程;当前活动线程转入等待执行队列,等待下一个时间片的调度。
在独占方式下,当前活动线程一旦获得执行权,将一直执行下去,直到执行完毕或由于某种原因主动放弃CPU,或者是有一高优先级的线程处于就绪状态。
举例说明
首先我想说的是:在多线程编程中,经常会使用sleep与wait操作,我们理解sleep与wait的最大区别是sleep等待是不会释放当前锁,而wait则反之。我今天想到一个现实例子来比较这两者的区别。
我以去火车站买票的例子来说明。我们去火车站买票,当站到售票窗口前要告诉售票员需要到哪里的票,什么时候发车的,售票员就通过电脑去给我们打印票,这个时候我们就得等待。如果我们用sleep模式,就得一直站在那里等,直到售票员给我们票;如果用wait模式,这个时候就离开我们所站的位置,后面的票友就可能站到我当前的位置(窗口前),我们要取票的话,就得重新排在队伍后面去取票。
展开更多 50%)
分享

猜你喜欢

Java线程中sleep和wait的区别详细介绍

编程语言 网络编程
Java线程中sleep和wait的区别详细介绍

wait,notify,sleep,join和线程同步问题(续)

编程语言 网络编程
wait,notify,sleep,join和线程同步问题(续)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java基础 java中模式和框架的介绍和区别

编程语言 网络编程
java基础 java中模式和框架的介绍和区别

java中静态变量和实例变量的区别详细介绍

编程语言 网络编程
java中静态变量和实例变量的区别详细介绍

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JAVA中 终止线程的方法介绍

编程语言 网络编程
JAVA中 终止线程的方法介绍

Java编程基础中模式和框架的介绍和区别

编程语言 网络编程
Java编程基础中模式和框架的介绍和区别

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

炽热的文字

炽热的文字

java中的枚举类型详细介绍

java中的枚举类型详细介绍
下拉加载更多内容 ↓