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()?有没有人有这个想法?
在此上下文中使用"当前线程",Javadoc表示"调用该方法的线程Thread.yield()"
在您的情况下,这是启动您的应用程序的主要线程.
正如Javadoc所解释的那样,通常没有必要打电话Thread.yield().它不需要做任何事情:
向调度程序提示当前线程是否愿意产生其当前使用的处理器.调度程序可以忽略此提示.
它似乎确实做了一些事情,至少在Java 6之前 - 找不到Java 7/8的参考.
视窗:
Hotspot VM现在
Thread.yield()使用WindowsSwitchToThread()API调用实现.这个调用使当前线程放弃其当前时间片,但不是它的整个量子.
Linux的:
在Linux下,Hotspot只是调用
sched_yield().此调用的后果有点不同,可能比Windows下更严重.
资料来源:http://www.javamex.com/tutorials/threads/yield.shtml