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(); } }
执行结果如下
每一秒钟只能允许一个线程执行。
posted on 2017-05-16 18:59 一只小蜗牛12138 阅读(137) 评论(0) 编辑 收藏 举报