Java join()函数的用法(附带实例)
Java 的 Thread 类提供了 join() 函数,当某个线程执行中调用其他线程的 join() 函数时,该线程将被阻塞,直到 join() 方法所调用的线程结束,这种情况称为线程插队。
接下来,通过案例来演示线程插队:
Demo 类在 main() 函数中创建 MyThread 类实例并启动线程,main() 函数中也循环打印吃菜的顺序,当变量 i 的值为 3 时,调用 join() 方法插入子线程,然后子线程开始执行,直到子线程执行完,main() 函数的主线程才能继续执行。
接下来,通过案例来演示线程插队:
public class Demo { public static void main(String[] args) throws Exception { // 创建MyThread实例 System.out.println("吃饭时吃菜的顺序:"); MyThread myThread1 = new MyThread("酱焖茼蒿"); myThread1.start(); // 开启线程 for (int i = 1; i < 6; i++) { if (i == 3) { try { System.out.println("酱焖茼蒿要开始插队了"); myThread1.join(); // 线程插入 } catch (Exception e) { e.printStackTrace(); } } System.out.println("水煮肉片" + i); } } } class MyThread extends Thread { private String socialStatus; private int tickets = 10; public MyThread(String socialStatus) { this.socialStatus = socialStatus; } @Override public void run() { for (int i = 1; i < 6; i++) { System.out.println(socialStatus + i); } } }程序的运行结果如下:
吃饭时吃菜的顺序:
水煮肉片1
水煮肉片2
酱焖茼蒿要开始插队了
酱焖茼蒿1
酱焖茼蒿2
酱焖茼蒿3
酱焖茼蒿4
酱焖茼蒿5
水煮肉片3
水煮肉片4
水煮肉片5
Demo 类在 main() 函数中创建 MyThread 类实例并启动线程,main() 函数中也循环打印吃菜的顺序,当变量 i 的值为 3 时,调用 join() 方法插入子线程,然后子线程开始执行,直到子线程执行完,main() 函数的主线程才能继续执行。