Java中多线程是独立运行的,并发执行,遵循自己的时间表。但是,有时候需要按照特定的顺序来执行多个线程,以便其运行方式与编程要求相适应。本文将介绍Java让多线程按顺序执行的几种方法。
方法1.依靠join()方法
在Java中,线程可以使用join()方法等待另一个线程的完成,直到当前线程已经结束执行或等到timeout毫秒。这个方法只能在共享同一个对象的线程中使用。
示例1:以下代码创建了3个线程,在main线程中使用join()(不带参数)等待这三个线程的完成,根据代码的线程名顺序,这三个线程的执行顺序应该是thread1, thread2, thread3。
public class ThreadSequence {
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
System.out.println("Thread1 running");
}, "thread1");
Thread thread2 = new Thread(() -> {
System.out.println("Thread2 running");
}, "thread2");
Thread thread3 = new Thread(() -> {
System.out.println("Thread3 running");
}, "thread3");
thread1.start();
thread2.start();
thread3.start();
thread1.join();
thread2.join();
thread3.join();
System.out.println("All threads finished");
}
}
示例2:以下代码创建了3个线程,使用CountDownLatch方法控制线程的执行顺序。将CountDownLatch设置为3,则只有当所有线程都执行完毕后才能够进行下一步。
import java.util.concurrent.CountDownLatch;
public class ThreadSequence {
public static void main(String[] args) throws InterruptedException {
final CountDownLatch countDownLatch = new CountDownLatch(3);
Thread thread1 = new Thread(() -> {
System.out.println("Thread1 running");
countDownLatch.countDown();
}, "thread1");
Thread thread2 = new Thread(() -> {
System.out.println("Thread2 running");
countDownLatch.countDown();
}, "thread2");
Thread thread3 = new Thread(() -> {
System.out.println("Thread3 running");
countDownLatch.countDown();
}, "thread3");
thread1.start();
thread2.start();
thread3.start();
countDownLatch.await();
System.out.println("All threads finished");
}
}
方法2.使用synchronized同步方法
synchronized方法可以保证同一时间,只有一个线程可以访问这个方法。我们可以利用这个特性实现我们的需求。
示例3:以下代码利用synchronized方法实现多线程按顺序执行,在ThreadOne执行完后才能执行ThreadTwo,ThreadTwo执行完后才能执行ThreadThree。
public class ThreadSequence {
public static void main(String[] args) {
final Object lock = new Object();
Thread thread1 = new Thread(() -> {
synchronized (lock) {
System.out.println("ThreadOne running");
lock.notifyAll();
}
});
Thread thread2 = new Thread(() -> {
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ThreadTwo running");
lock.notifyAll();
}
});
Thread thread3 = new Thread(() -> {
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ThreadThree running");
}
});
thread1.start();
thread2.start();
thread3.start();
}
}
本文介绍了Java中让多线程按顺序执行的几种方法:使用join()方法和CountDownLatch方法进行控制,以及使用synchronized同步方法。希望本文对读者有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java让多线程按顺序执行的几种方法 - Python技术站