信號量,限制同一時間,訪問特定資源的線程數量,以保證合理的使用特定資源。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