目录
引出
Java多线程——如何控制线程顺序执行,如何控制线程同时执行
如何控制线程执行顺序?
问题:现在有 T1、T2、T3 三个线程,你怎样保证 执行顺序是t3—> t2 —> t1 ?
public class App8 {
public static void main(String[] args) throws Exception {
Thread t1 = new Thread(() -> {
System.out.println("执行t1");
}, "t1");
Thread t2 = new Thread(() -> {
System.out.println("执行t2");
}, "t2");
Thread t3 = new Thread(() -> {
System.out.println("执行t3");
}, "t3");
t3.start();
//t.join()方法只会使主线程(或者说调用t.join()的线程)进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。
t3.join();
t2.start();
t2.join();
t1.start();
t1.join();
}
}
多个线程在某一时刻同时开始执行?
countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。 倒计时闭锁。
CountDownLatch
是 Java 标准库中提供的一个同步工具类,用于在多线程编程中协调多个线程的执行顺序。它的作用是允许一个或多个线程等待其他线程完成操作后再继续执行,用于控制线程之间的同步。
CountDownLatch
的核心思想是:一个线程(或多个线程)等待其他线程完成某个操作后,再继续执行。
- CountDownLatch
- 1、作用: 主要用于控制一个或多个线程等待其他线程完成一组操作,然后再继续执行
- 2、await()方法则使调用该方法的线程处于等待状态,一般是主线程调用。
- 3、countDown()方法每次都会使计数器减一,减为0时处于阻塞等待的主线程将会被唤醒。
public class App9 {
/**
* CountDownLatch
* 1、作用: 主要用于控制一个或多个线程等待其他线程完成一组操作,然后再继续执行
* 2、await()方法则使调用该方法的线程处于等待状态,一般是主线程调用。
* 3、countDown()方法每次都会使计数器减一,减为0时处于阻塞等待的主线程将会被唤醒。
* 需求:三局对战都胜利,才胜利
*/
public static void main(String[] args) throws InterruptedException {
String[] country = {
"对战1","对战2","对战3"};
CountDownLatch countDownLatch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
new Thread(()->{
// 执行任务
System.out.println(Thread.currentThread().getName() + "执行完毕");
// 任务完成,减少计数
countDownLatch.countDown();
},country[i]).start();
}
// 等待所有任务完成
countDownLatch.await();
System.out.println("取得胜利!!!");
}
}
创建线程有几种方式?
方式1:继承Thread创建线程
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
public static void main(String[] args) {
MyThread t1 = new MyThread();
t1.start();
MyThread t2 = new MyThread();
t2.start