Shi*_*n-O 8 java multithreading yield
在javadoc中有说yield方法
导致当前正在执行的线程对象暂时暂停并允许其他线程执行.
Katherine Sierra和Bert Bates的SCJP书中说过
yield()应该做的是使当前运行的线程返回runnable以允许具有相同优先级的其他线程轮到他们.
那么实际的方法是做什么的?
jjn*_*guy 12
给定一个多线程应用程序,yield将导致当前正在执行的线程暂停执行并设置为等待状态.然后,JVM将开始运行另一个先前处于等待状态的线程.
我相信刚刚产生的同一个线程在技术上可以安排再次启动.
而且我还没有在野外看到这一点.所以我觉得避免安全.
详细说明:
在多线程环境中,线程是在JVM的意愿下调度和打开的.因此,即使在代码中没有调用yield,当JVM决定它应该时,你的线程可以/将自动屈服于其他线程.这允许多线程在仅具有一个处理核心的环境中工作.
调用yield只是告诉JVM将当前线程置于等待状态,即使JVM不会.
我将尝试说明:
以下是随着时间的推移执行2个线程的非常简化的说明(假设1个核心) -
Thread\Time 1 2 3 4 5 6 7 8 9
Thread 1 ----------- ----- -------
Thread 2 ------- ---------- ------
Run Code Online (Sandbox Code Playgroud)
每当你看到'-'这意味着一个线程正在执行.A ' '表示线程正在等待.如您所见,一次只能运行一个线程.因此,当1次运行时,另一次等待.要产生的收益是让其他线程有机会在当前运行的线程之前运行.
| 归档时间: |
|
| 查看次数: |
6380 次 |
| 最近记录: |