1.CountDownLatch
package com.magic.juc0117;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(6);
for (int i = 0; i < 6; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"离开");
countDownLatch.countDown();//相当于在倒数
},String.valueOf(i)).start();
}
countDownLatch.await();
System.out.println("关门走人");
}
public void closeDoor(){ //这种未必是班长最后
for (int i = 0; i < 6; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"离开");
},String.valueOf(i)).start();
}
System.out.println("班长最后关门走人");
}
}
2.CyclicBarrier
package com.magic.juc0117;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierDemo {
public static void main(String[] args) {
//相当于数到7打印test
CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{System.out.println("test"); });
for (int i = 0; i < 7; i++) {
final int tempInt = i;
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"\t收集到"+tempInt);
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
},String.valueOf(i)).start();
}
}
}
3.Semaphore
package com.magic.juc0117;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
/**
* @Description 类似于抢车位,工作中可以用来限流
* @Author Chelsea
* @Date 2020/1/28 21:35
*/
public class SemaphoreDemo {
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(3);//1相当于synchronized
for (int i = 0; i < 6; i++) {
new Thread(() -> {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"\t抢占到了车位");
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName()+"\t离开");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
},String.valueOf(i)).start();
}
}
}
学习整理于面试题.