信号量,限制同一时间,访问特定资源的线程数量,以保证合理的使用特定资源。ide
public class SemaphoreDemo { static Semaphore semaphore = new Semaphore(2); static class Thread1 implements Runnable { @Override public void run() { try { semaphore.acquire(); Thread.sleep(1000); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(Thread.currentThread().getName() + "-" + formatter.format(new Date())); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { for (int i = 0; i < 8; i++) { new Thread(new Thread1()).start(); } } }
运行结果以下:
能够看出,每次执行都是2个。
若是把semaphore.acquire()和semaphore.release()注释掉,能够看的结果以下:
同一时间,都打印到了控制台。ui