zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    

      执行结果如下 

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

  • 相关阅读:
    poj 2100 尺取法 一个数字拆成连续数字平方和
    poj 1011 dfs+剪枝
    CF-242-C bfs+stl
    hdu 1297 递推
    poj 2104 划分树模板
    poj 3842 全排列+筛素数+暴力
    hdu 1421 经典dp
    hdu 1069 最长上升子序列变形
    hdu 3496 二维费用的01背包
    nyoj 16 最长上升子序列变形
  • 原文地址:https://www.cnblogs.com/javabigdata/p/6863110.html
Copyright © 2011-2022 走看看