仅提供学习,侵权必删,如有错误,敬请告知
一、CountDownLatch
private static CountDownLatch countDownLatch = new CountDownLatch(100); //指定一百个
public static void name() {
System.out.println(Thread.currentThread().getName()+"执行了一次");
countDownLatch.countDown();
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(()-> {
name();
},String.valueOf(i)).start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("已执行完毕!");
System.out.println("剩余数量:"+countDownLatch.getCount());
}
二、CyclicBarrier
package Suo9;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class a {
private static CyclicBarrier cyclicBarrier = new CyclicBarrier(100,()-> {System.out.println("第一百次执行!结果");}); // 指定一百个
public static void name() {
System.out.println(Thread.currentThread().getName() + "执行了一次");
}
public static void main(String[] args) throws InterruptedException, BrokenBarrierException {
for (int i = 0; i < 100; i++) {
Thread thread = new Thread(i + "") {
@Override
public void run() {
// TODO Auto-generated method stub
name();
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
thread.start();
}
}
}
三、Semaphore
package com.web.dengdai;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class SemaphoreDemo {
private static final int count = 3 ; //蛋糕总数量
private static final int users = 15 ; //用户总数量
private static Semaphore semaphore = new Semaphore(count);
public static void qiang() {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"用户抢到了蛋糕");
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"用户两秒后离开");
} catch (Exception e) {
e.printStackTrace();
}finally {
semaphore.release();
}
}
public static void main(String[] args) {
for (int i = 1; i <= users; i++) {
new Thread(()-> {
qiang();
},String.valueOf(i)).start();
}
}
}