一局只能让三个线程进去
@Slf4j
@AllArgsConstructor
public class Kitchen2 implements Runnable{
private AtomicInteger count;
@SneakyThrows
private void add(){
int current = count.getAndDecrement();
if(current > 0){
log.info("厨师{}进入厨房 ",Thread.currentThread().getName());
Thread.sleep(1000);
log.info("厨师{}走出厨房",Thread.currentThread().getName());
}else{
log.info("厨师{} 进不来",Thread.currentThread().getName());
}
}
@Override
public void run() {
add();
}
}
public class Start2 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
Kitchen2 kitchen = new Kitchen2(new AtomicInteger(3));
for(int i = 0;i < 12;i++){
executorService.submit(kitchen);
}
}
}
一次只能让三个线程进去
@AllArgsConstructor
@Data
@Slf4j
public class Kitchen implements Runnable{
private Semaphore semaphore;
@SneakyThrows
private void add(){
semaphore.acquire();
int space = semaphore.availablePermits();
log.info("厨师{}进入厨房 ",Thread.currentThread().getName());
Thread.sleep(1000);
log.info("厨师{}走出厨房",Thread.currentThread().getName());
semaphore.release();
}
@Override
public void run() {
add();
}
}
public class Start {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
Kitchen kitchen = new Kitchen(new Semaphore(3));
for(int i = 0;i < 20;i++){
executorService.submit(kitchen);
}
}
}