线程同步是非常经常使用的,有必要掌握。
比如Handler方法等待,可以去研究一番。
Thread类的join方法也可以实现同步,简单。
下面例子在主线程中开一个子线程,子线程每隔1s输出一个字符串,主线程等待子线程结束才输出“子线程结束”
public class ThreadJoin {
public static void main(String[] args) throws InterruptedException {
new ThreadJoin().test();
}
/**
* 主线程等待子线程结束才响应
* @throws InterruptedException
*/
public void test() throws InterruptedException {
Thread t = new Thread(new MyRunnable());
System.out.println("t线程开始。。。");
t.start();
//等待t线程结束,如果超过10s还没结束,则不再等待。注意此时t线程并没有停止。
t.join(10000);
System.out.println("t线程结束。。。");
}
/**
* 这是一个线程,每隔1s打印一句话,打印5句结束
*/
class MyRunnable implements Runnable {
@Override
public void run() {
for(int i=1; i<=5; i++) {
System.out.println(i * 10000000);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
注意:《1》join方法可以没有参数。
《2》上面代码如果10s之后子线程还没有运行完毕,则主线程不再等待,继续运行。但是此时子线程并不会结束,而是继续运行。