knrt.net
当前位置:首页 >> jAvA线程中,slEEp时间过后会怎样?wAit时间过后会怎样? >>

jAvA线程中,slEEp时间过后会怎样?wAit时间过后会怎样?

sleep时间过后,线程会进入就绪态,等待系统调度,如果此时系统资源请允许(CPU等各种需要的资源),线程就进入运行态继续执行后续程序.wait是等待其他线程唤醒,如果时间到后仍未被其他线程唤醒,则会抛出超时异常.当wait不带参数时,程序会一直等下去直到被唤醒.

sleep是暂停一个线程,但是不会释放锁,等到sleep的时间到了,会继续执行.wait也是会暂停一个线程,但是会释放锁,然后等待notify或allnotify时才会被唤醒,但这时的唤醒并不会决定线程执行的优先级即并不能决定某个线程的执行先后顺序.

sleep执行后线程进入阻塞状态 yield执行后线程进入就绪状态 join执行后线程进入阻塞状态 join()中止当前线程(也就是a),等待指定(也就是b)线程结束,然后再运行当前线程

wait是java线程间通信的机制,和notify结合使用.sleep是java中线程主动放弃运行,并挂起一定的时间.

死锁

sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态.在调用sleep()方法的过程中,线程不会释放对象锁.因此不会影响性能.

看下api的文档就知道了啦,如果是用sleep方法的话,应该用interupt方法唤醒,不过这个方法在1.6之后被建议不再使用了

sleep是Thread类的方法,wait是Object的方法; sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法; wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用; sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常; sleep可以自动到时间后启动,而wait必须由notify或notifyAll启动. 详细可参考:http://uule.iteye.com/blog/1106710

Java中的多线程是一种抢占式的机制 而不是分时机制.抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行.共同点:1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回.2. wait()和sleep

wait()、notify()、notifyAll()这三个方法是Object中的方法,跟锁类似.当t1没有获取这个object时wait,其他线程释放object后叫notify,然后t1立即继续执行.sleep()跟上面这三个不一样,是Thread中的方法,不需要等待资源被释放,sleep有一个时间传参,想让线程等待多会儿就等待多会儿,不需要其他线程唤醒.例如:try{ t1.sleep(1000); //t1等待1秒后继续执行下面的内容}catch(Exception e){}

网站首页 | 网站地图
All rights reserved Powered by www.knrt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com