【每日一练】java线程

有20个学生去旅游,每个学生上车时间先后顺序不同,司机需要的等待20个同学都上车了才出发;到达目的地后,打开车门,每个学生下车的先后顺序不同,司机需要等待20个同学全部下车才关闭车门。
 
提示:
1.线程池选择
2.堵塞选择
3.计数器

--来自网页客户端
已邀请:

sjing - Google

赞同来自:

    @test
    public void contextLoads() {
        /**
         * 有20个学生去旅游,每个学生上车时间先后顺序不同,司机需要的等待20个同学都上车了才出发;
         * 到达目的地后,打开车门,每个学生下车的先后顺序不同,司机需要等待20个同学全部下车才关闭车门。
         */
        ExecutorService executorService = Executors.newFixedThreadPool(20);
        final CountDownLatch in = new CountDownLatch(20);
        final CountDownLatch wait = new CountDownLatch(1);
        final CountDownLatch out = new CountDownLatch(20);
        for (int i = 0; i < 20; i++) {
            final int j = i + 1;
            Runnable runnable = () -> {
                System.out.println(j + "学生上车了");
                in.countDown();
                try {
                    wait.await();//等待
                    TimeUnit.MINUTES.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    System.out.println(j + "学生下车了");
                    out.countDown();
                }
            };
            executorService.submit(runnable);
        }
        //执行
        try {
            in.await();
            System.out.println("所有学生都已经上车了");
            wait.countDown();
            System.out.println("下车中...");
            out.await();
            System.out.println("所有学生都下车完了");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

--来自网页客户端

要回复问题请先登录注册

Template error, template file not found