您的位置:首页 > 其它

线程中yield()与join()方法的使用

2013-09-16 21:30 316 查看
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();
}
}
}


输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: