、sleep() wait() yeild()三者之间的区别?
2012-05-09 12:07
302 查看
1、sleep()方法会给其他线程运行的机会,而不考虑其他线程的优先级,因此会给较低线程一个运行的机会;yield()方法只会给相同优先级或者更高优先级的线程一个运行的机会。
2、当线程执行了sleep(long millis)方法后,将转到阻塞状态,参数millis指定睡眠时间;当线程执行了yield()方法后,将转到就绪状态。
3、sleep()方法声明抛出InterruptedException异常,而yield()方法没有声明抛出任何异常
4、sleep()方法比yield()方法具有更好的移植性
5、当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待os分配时间片;
6、当线程调用了yeild()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;
7、当线程刚进入可运行状态(即就绪状态),发现将要调用的资源被synchronized(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,即先到先得)一旦线程获得锁标记后,就转入可运行状态,等待os分配CPU时间片;
8、当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去了对象的锁。它被一个notify()方法唤醒时,等待池中的线程就被放到锁池中。该线程从锁池中获得锁,然后回到wait()前的中断现场。
9当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(wait(1000)时可以自动唤醒)(由于notify()只是唤醒一个线程。但我们由于不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够唤醒,)因此在实际使用时,一般都用notifyAll(),方法唤醒所有线程(),当线程被唤醒后会进入锁池,等待获得锁标记
2、当线程执行了sleep(long millis)方法后,将转到阻塞状态,参数millis指定睡眠时间;当线程执行了yield()方法后,将转到就绪状态。
3、sleep()方法声明抛出InterruptedException异常,而yield()方法没有声明抛出任何异常
4、sleep()方法比yield()方法具有更好的移植性
5、当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待os分配时间片;
6、当线程调用了yeild()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;
7、当线程刚进入可运行状态(即就绪状态),发现将要调用的资源被synchronized(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,即先到先得)一旦线程获得锁标记后,就转入可运行状态,等待os分配CPU时间片;
8、当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去了对象的锁。它被一个notify()方法唤醒时,等待池中的线程就被放到锁池中。该线程从锁池中获得锁,然后回到wait()前的中断现场。
9当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(wait(1000)时可以自动唤醒)(由于notify()只是唤醒一个线程。但我们由于不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够唤醒,)因此在实际使用时,一般都用notifyAll(),方法唤醒所有线程(),当线程被唤醒后会进入锁池,等待获得锁标记
相关文章推荐
- 、sleep() wait() yeild()三者之间的区别?
- sleep() wait() yeild()三者之间的区别?
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- java await、wait与sleep和yield之间的区别
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- 【java并发编程】yeild(),sleep(),wait()区别详解
- 等级保护、风险评估和安全测评三者之间的区别与联系
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- java多线程 sleep()和wait()的区别
- wait(1000)与sleep(1000)的区别
- wait、sleep、notify、notifyAll的区别
- java多线程 sleep()和wait()的区别
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
- innerHTML,outerHTML,innerTEXT三者之间的区别
- sleep wait yeild join
- break,continue,return三者之间的区别
- Thread的sleep方法和wait方法的区别
- 休眠、挂起、待机三者之间的区别
- java中wait和sleep的区别
- Java Sleep() 与 Wait()的机制原理与区别