写一个程序,在main线程中启动100个线程,100个线程完成后,主线程打印“完成”, 使用join()和countdownlatch都可以完成,请比较异同,循环栅栏
import org.junit.Test;
import java.util.concurrent.CountDownLatch;
/**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/10/09/16:44
* @Version
* @Description 10、写一个程序,在main线程中启动100个线程,100个线程完成后,主线程打印“完成”,
* 使用join()和countdownlatch都可以完成,请比较异同,循环栅栏
*/
public class T6 {
@Test
public void test1(){
CountDownLatch latch = new CountDownLatch(100);
for (int i = 0; i < 100; i++) {
new Thread(()->{
String t = Thread.currentThread().getName();
System.out.printf("%s : 开始执行...%n",t);
System.out.printf("%s : 执行完毕,程序结束。%n",t);
latch.countDown();
},"T"+i).start();
}
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("----------------------------");
System.out.println("100个线程执行完毕!");
String t = Thread.currentThread().getName();
System.out.printf("%s : 执行完毕,程序结束。%n",t);
}
@Test
public void test2(){
for (int i = 0; i < 100; i++) {
Thread t = new Thread(()->{
String tn = Thread.currentThread().getName();
System.out.printf("%s : 开始执行...%n",tn);
System.out.printf("%s : 执行完毕,程序结束。%n",tn);
},"T"+i);
t.start();
try {
t.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println("-----------------------");
System.out.println("100个线程执行完毕!");
String t = Thread.currentThread().getName();
System.out.printf("%s : 执行完毕,程序结束。%n",t);
}
}