二、yield()方法
当前线程调用yield方法,通知虚拟机当前线程让出cpu 占有权,但是什么时候让出是不可设定的,也不会释放锁资源。所以使用yield方法最好是释放锁后在调用。
注:执行yield方法的线程有可能在进入到就绪状态后在被操作系统选中马上执行。
由于不好演示这边不做代码演示。
三、join()方法
join() 方法可以将两个交替执行的线程合并为顺序执行,概念比较抽象直接上代码。
/**
* join() 方法演示类
* @author ckj
*
*/
public class JoinThread {
static class Tom implements Runnable {
private Thread jerryThread;
public Tom(Thread jerryThread) {
this.jerryThread = jerryThread;
}
public void run() {
System.out.println("Tom 正在吃饭");
try {
if(jerryThread !=null) {
jerryThread.join();
}
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("Tom 吃完饭了");
}
}
static class Jerry implements Runnable {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Jerry 正在吃饭");
System.out.println("Jerry 吃完饭了");
}
}
public static void main(String[] args) {
Thread JerryThread = new Thread(new Jerry());
Thread tomThread = new Thread(new Tom(JerryThread));
tomThread.start();
JerryThread.start();
}
如果注释掉join 方法的话执行结果应该是
Tom 正在吃饭
Tom 吃完饭了
Jerry 正在吃饭
Jerry 吃完饭了
增加了join 方法后执行结果是
Tom 正在吃饭
Jerry 正在吃饭
Jerry 吃完饭了
Tom 吃完饭了
可见在线程 Tom中调用了线程 Jerry 的 Join()方法,直到线程 Jerry 执行完毕后,才会继续 执行线程 Tom