join():Thread的实例方法,作用是阻塞当前线程,让调用join方法的线程占用CPU,当前进程进入阻塞状态。
yield():Thread的实例方法,作用是将当前对象占有的CPU让出,当前线程进入就绪状态等待CPU调度,但也可能马上就会继续调度这个线程,这是由CPU指定的。
结合了Lambda表达式、多线程的yield方法和join方法的一个代码例子:
package TestTread;
/**
* yield() Thread的实例方法,作用是将当前对象占有的CPU让出,当前线程进入就绪状态等待CPU调度,但也可能马上就会继续调度这个线程,这是由CPU指定的
* join() Thread的实例方法,作用是阻塞当前线程,让调用join方法的线程占用CPU,当前进程进入阻塞状态
* @author Administrator
*
*/
public class TestYieldAndJoin {
public static void main(String[] args) {
T1 t1 = new T1();
t1.start();
}
static void doS() {
new Thread(()->{
int i = 0;
while(i<10) {
System.out.println(Thread.currentThread().getName()+"--->"+i++);
if(i==5) Thread.currentThread().yield();//当前线程进入就绪状态,让出CPU
}
},"thread1").start();
int j = 10;
while(j<20) System.out.println(Thread.currentThread().getName()+"--->"+j++);
}
}
class T1 extends Thread{
public void run() {
int i = 0;
T2 t2 = new T2();
while(i<10) {
System.out.println(Thread.currentThread().getName()+"--->"+i++);
if(i==5) {
t2.start();
try {
t2.join();//当前线程进入阻塞状态,t2线程占有CPU,只有t2运行结束,当前线程才会进去就绪状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class T2 extends Thread{
public void run() {
int i = 0;
while(i<10) System.out.println(Thread.currentThread().getName()+"--->"+i++);
}
}