第一种方式join
/**
* Date:2016年9月7日下午7:43:13
* Copyright (c) 2016, www.bwbroad.com All Rights Reserved.
*
*/
package test.join;
import test.Task;
/**
* Description: TODO <br/>
* Date: 2016年9月7日 下午7:43:13 <br/>
* @author xuejianxin
*/
public class JoinTest {
public static void main(String[] args) throws Exception {
System.out.println("main is begin");
Thread task1=new Thread(new Task(1));
task1.start();
Thread task2=new Thread(new Task(2));
task2.start();
//等待task1 over
task1.join();//task1 join 到当前线程
task2.join();
System.out.println("main is end") ;
}
}
第二种方式 wait
/**
* Date:2016年9月7日下午7:50:04
* Copyright (c) 2016, www.bwbroad.com All Rights Reserved.
*
*/
package test.wait;
import test.Task;
/**
* Description: TODO <br/>
* Date: 2016年9月7日 下午7:50:04 <br/>
* @author xuejianxin
*/
public class WaitTest1 {
public static void main(String[] args) throws Exception {
/**
* 多线程交互 必须有一个标识,这个标识在java 里就是对象本身
*/
System.out.println("main is begin");
Thread task1=new Thread(new Task(1));
task1.start();
Thread task2=new Thread(new Task(2));
task2.start();
/*synchronized (WaitTest1.class) {//这样是不行的
task1.wait();
task2.wait();
}
*/
synchronized (task1) {
task1.wait();
//task2.wait();//这样是不行的
}
synchronized (task2) {
//task1.wait();//这样是不行的
task2.wait();
}
System.out.println("main is end") ;
}
}