ExecutorService.shutdown()应该是在线程执行完毕后,才会去封锁

ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
Java多线程-线程池ExecutorService.shutdown什么时候执行

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class SemaphoreTest extends Thread {
	Semaphore position;
	private int id;

	public SemaphoreTest(int i, Semaphore s) {
		this.id = i;
		this.position = s;
	}

	public void run() {
		try {
			if (position.availablePermits() > 0) {
				System.out.println("顾客[" + id + "]进入厕所,有空位");
			} else {
				System.out.println("顾客[" + id + "]进入厕所,没空位,排队");
			}
			position.acquire();
			System.out.println("【" + id + "】acquire坑位");
			Thread.sleep((int) (Math.random() * 1000));
			System.out.println("【" + id + "】完毕release");
			position.release();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String args[]) {
		ExecutorService pool = Executors.newCachedThreadPool();
		Semaphore position = new Semaphore(2); // 初始化两个空位
		for (int i = 0; i < 5; i++) {
			pool.submit(new SemaphoreTest(i, position));
		}
		System.out.println("开始释放线程池资源");
		pool.shutdown();
		System.out.println("完成释放线程池资源");
		position.acquireUninterruptibly(2);
		System.out.println("如厕完毕,清理厕所");
		position.release(2);
	}
}