0
点赞
收藏
分享

微信扫一扫

Java并发编程场景

ZGtheGreat 2022-03-22 阅读 50

一局只能让三个线程进去

/**
 * @Description 一天只能三个线程进入
 * @Date 2022/3/22 20:44
 * @Created by koala
 */

@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);
        }
    }
}
举报

相关推荐

0 条评论