zoukankan      html  css  js  c++  java
  • Java多线程之Semaphore信号量

        转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6557874.html 

        学过操作系统的对 信号量 这个词应该不陌生,它是用来进行进程间通信,控制对 临界区(即同步代码块) 的访问的。

        Semaphore与syncrhoized、ReentrantLock加锁的方法不同,后两者是针对一把锁来实现同步互斥的(一个时刻只能有一个线程持有该锁),而Semaphore是一个共享锁,允许多个线程同时持有它,即同一时刻允许有多个线程同时操作临界区。只有当信号量为0时,申请进入临界区的线程才阻塞。

        使用信号量分为:

        1:创建信号量,指定有共享名额:e.g. final Semaphore semaphore = new Semaphore(3);

        2:在需要进入临界区(同步代码块)时,申请获得信号量。如果获得成功,就会进入临界区执行,并且信号量共享名额会自动减一;如果信号量已经为0,则申请失败,阻塞线程:semaphore.acquire();

          {临界区代码......} 

        3:执行完同步代码后,释放信号量,此时信号量+1:{临界区代码...;}

                                                                             semaphore.release();

  • 相关阅读:
    hdu 3018
    poj 1833 排列
    poj 1256 Anagram
    CF 548B Mike and Fun
    CF 548A
    【冰茶几专题】F
    【冰茶几专题】C
    535 C.Tavas and karafs
    [WA]cf 534 D. Handshakes
    cf 534C. Polycarpus' Dice
  • 原文地址:https://www.cnblogs.com/ygj0930/p/6557874.html
Copyright © 2011-2022 走看看