学科分类
目录
Java基础

线程插队

现实生活中经常能碰到“插队”的情况,同样,在Thread类中也提供了一个join()方法来实现这个“功能”。当在某个线程中调用其他线程的join()方法时,调用的线程将被阻塞,直到被join()方法加入的线程执行完成后它才会继续运行。接下来通过一个案例来演示一下join()方法的使用,如文件1所示。

文件1 Example10.java

 1    class EmergencyThread implements Runnable {
 2        public void run() {
 3            for (int i = 1; i < 6; i++) {
 4                System.out.println(Thread.currentThread().getName()
 5                        +"输入:"+i);
 6            }
 7        }
 8    }
 9    public class Example10 {
 10        public static void main(String[] args) throws InterruptedException {
 11            // 创建线程
 12            Thread thread1 = new Thread(new EmergencyThread(),"thread1");
 13            thread1.start(); // 开启线程
 14            for (int i = 1; i < 6; i++) {
 15                System.out.println(Thread.currentThread().getName()
 16                                     +"输入:"+i);
 17                if (i == 2) {
 18                    thread1.join(); // 调用join()方法
 19                }
 20            }
 21        }
 22    }

运行结果如图1所示。

图1 运行结果

文件1中,在main线程中开启了一个线程thread1,这两个线程会相互争夺CUP使用权输出语句。当main线程中的循环变量为2时,调用thread1线程的join()方法,这时,thread1线程就会“插队”优先执行,并且整个程序执行完毕后才会执行其他线程。从运行结果可以看出,当main线程输出2以后,thread1线程就开始执行,直到执行完毕,main线程才继续执行。

Thread类中除了提供一个无参数的线程插队join()方法外,还提供了带有时间参数的线程插队方法join(long millis)。当执行带有时间参数的join(long millis)进行线程插队时,必须等待插入的线程指定时间过后才会继续执行其他线程。

点击此处
隐藏目录