受Thread.yield()影响的线程?

Han*_*Sun 2 java concurrency multithreading

这是一个多线程的HelloWorld:

public class HelloWorld {

    public static void main(String[] args) throws InterruptedException {
        Thread myThread = new Thread() {
            public void run() {
                System.out.println("Hello World from new thread");
            }
        };
        myThread.start();
        Thread.yield();
        System.out.println("Hello from main thread");
        myThread.join();
    }
}
Run Code Online (Sandbox Code Playgroud)

据我了解,之后myThread.start()会有两个线程在运行.一个是主线程,另一个是新创建的myThread.然后,在哪个线程中引用Thread.yield()

我查了一下Java SE6 Doc

Thread.yield():使当前正在执行的线程对象暂时暂停并允许其他线程执行

但在代码中,我无法清楚地看到currently excuting thread它是什么,它看起来两个线程同时运行.

是不是更清楚地说myThread.yield()而不是Thread.yield()?有没有人有这个想法?

Erw*_*idt 5

在此上下文中使用"当前线程",Javadoc表示"调用该方法的线程Thread.yield()"

在您的情况下,这是启动您的应用程序的主要线程.

正如Javadoc所解释的那样,通常没有必要打电话Thread.yield().它不需要做任何事情:

向调度程序提示当前线程是否愿意产生其当前使用的处理器.调度程序可以忽略此提示.

它似乎确实做了一些事情,至少在Java 6之前 - 找不到Java 7/8的参考.

视窗:

Hotspot VM现在Thread.yield()使用Windows SwitchToThread()API调用实现.这个调用使当前线程放弃其当前时间片,但不是它的整个量子.

Linux的:

在Linux下,Hotspot只是调用sched_yield().此调用的后果有点不同,可能比Windows下更严重.

资料来源:http://www.javamex.com/tutorials/threads/yield.shtml