对于CountDownLatch 的 使用理解
- 其中对于 JVM多线程中基本数据类型 与 栈关系 的理解,堆与对象的理解
package com.pengshi.ThreadTest;
import java.util.concurrent.CountDownLatch;
/**
* @description: CountDownLatch 的使用和理解
* 它相当于一个计数器。用一个给定的数值初始化CountDownLatch,之后计数器就从这个值开始倒计数,直到计数值达到零。
* 下面线程中就是使用了CountDownLatch,当被wait一次后,需要进行两次计数,才能释放当前线程 就是一种倒计时计数器
*
* 栈 与 多线程的理解概念
* @projectName: Algorithm
* @see: com.pengshi.ThreadTest
* @author: pc
* @createTime: 2022/2/25 20:44
* @version: 1.0
*/
public class CountDownTest {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(2);
int i = 0; // 需要注意的是,JVM 中线程 栈存放的是基本数据类型 和 引用数据类型, 同时 对于i而言 基本数据类型不能放在
// 其他线程中,因为没有数据引用,栈是独立的
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("t1 start...............");
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t1 end ..................");
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("t2 start...............");
countDownLatch.countDown();
System.out.println("t2 end ..................");
}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("t2 start...............");
countDownLatch.countDown();
System.out.println("t2 end ..................");
}
});
}
}