java多线程系列7 高级同步工具(1)信号量Semaphore

Semaphore叫做信号量

可以控制某个资源可被同时访问的个数,

         acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待。

         release() 释放一个许可。

   当信号量的只允许一个线程访问时,就变成了锁的功能。

如下所示 :Semaphore semaphore = new Semaphore(1); 

下面代码演示

public class SemaphoreTest {
	public static void main(String[] args) {
	
		ExecutorService exec = Executors.newCachedThreadPool();
//创建一个信号量 只允许一个线程访问
		Semaphore semaphore = new Semaphore(1);
		for (int i = 0; i < 10; i++) {
			final int NO = i;
			Runnable run = new Runnable() {
				@Override
				public void run() {
					try {
						semaphore.acquire();
						System.out.println("thread "+NO +" "+(System.currentTimeMillis()/1000));
						Thread.sleep((long) 1000);
					} catch (Exception e) {
						e.printStackTrace();
					} finally {
						semaphore.release();
					}

				}
			};
			exec.execute(run);
		}
		// 退出线程池
		exec.shutdown();
	}
}

  执行结果如下 

 每一秒钟只能允许一个线程执行。

原文地址:https://www.cnblogs.com/javabigdata/p/6863110.html