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();
    	}
    }
    

      执行结果如下 

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

  • 相关阅读:
    fake data
    template 的简单使用
    computed what time passage pushed-
    drag And drop
    threeJs(1)
    使用babel
    PHP海补知识(2)-- 复合赋值操作
    PHP海补知识(1)-- 可变变量
    一个裸的Ubuntu系统,搭建LAMP需要配置这些东西
    Ubuntu Server 12.04 U盘启动盘打包
  • 原文地址:https://www.cnblogs.com/javabigdata/p/6863110.html
Copyright © 2011-2022 走看看