Java Thread中, join() 方法主要是让调用该方法的thread完成run方法里面的东西后, 再执行join()方法后面的代码。示例:
- class ThreadTesterA implements Runnable {
- private int counter;
- @Override
- public void run() {
- while (counter <= 10) {
- System.out.print("Counter = " + counter + " ");
- counter++;
- }
- System.out.println();
- }
- }
- class ThreadTesterB implements Runnable {
- private int i;
- @Override
- public void run() {
- while (i <= 10) {
- System.out.print("i = " + i + " ");
- i++;
- }
- System.out.println();
- }
- }
- public class ThreadTester {
- public static void main(String[] args) throws InterruptedException {
- Thread t1 = new Thread(new ThreadTesterA());
- Thread t2 = new Thread(new ThreadTesterB());
- t1.start();
- t1.join(); // wait t1 to be finished
- t2.start();
- t2.join(); // in this program, this may be removed
- }
- }
class ThreadTesterA implements Runnable { private int counter; @Override public void run() { while (counter <= 10) { System.out.print("Counter = " + counter + " "); counter++; } System.out.println(); } } class ThreadTesterB implements Runnable { private int i; @Override public void run() { while (i <= 10) { System.out.print("i = " + i + " "); i++; } System.out.println(); } } public class ThreadTester { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new ThreadTesterA()); Thread t2 = new Thread(new ThreadTesterB()); t1.start(); t1.join(); // wait t1 to be finished t2.start(); t2.join(); // in this program, this may be removed } }
如果t2的执行需要依赖于t1中的完整数据的时候,这种方法就可以很好的确保两个线程的同步性。