yield()的使用:
public class ThreadDemo2 {
public static void main(String[] args) {
DemoThread dt1=new DemoThread("线程1");
DemoThread dt2=new DemoThread("线程2");
dt1.start();
dt2.start();
}
}
//创建一个线程类
class DemoThread extends Thread{
public String name;
public DemoThread(String name) {
this.name=name;
}
@Override
public void run() {
try {
for(int i=1;i<=10;i++){
Thread.sleep(200);
System.out.println(name+"------"+i);
if(i%3==0){
Thread.yield();//放弃CPU资源(暂停当前正在执行的线程对象,并执行其他线程。)
System.out.println(name+"------"+"让"+i);
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出结果:
join()的使用:
public class ThreadDemo4 {
public static void main(String[] args) throws Exception{
System.out.println("主线程开始");
XDemo xd1=new XDemo();
XDemo xd2=new XDemo();
XDemo xd3=new XDemo();
//start方法规定了子线程都在两秒延迟后才执行
xd1.start();
xd2.start();
xd1.join(800);//暂停主线程,等待子线程800毫秒,如果子线程没有执行继续向下执行(在这里,因为只等待0.8秒,但是子线程等待2秒,所以会向下下执行)
//如果把参数去掉,那么就会暂停主线程,直到xd1线程执行完之后继续向下执行
System.out.println("----");
System.out.println("-------");
xd3.start();
xd3.join(700);//没有等到子线程执行
System.out.println("===");//继续向下执行
}
}
class XDemo extends Thread{
@Override
public void run() {
try {
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
输出结果: