Semaphere:翻译为信号灯,其实就是提供一个值,用来限制并发访问量的,如果大于他的这个值,则会阻塞,小于的话可以进行执行,看例子:
public class SemaphoreDemo2 {
/**
* 建立信号灯类
* 第一个参数为:并发数
* 第二个参数为:是否公平,默认为false,也就是一个参数的构造函数时就默认为false,
* 那么何为是否公平呢? 如果设置为true,就是公平,意味着当并发数已经达到5时,
* 后面谁先来的,到时候有人释放了一个信号灯时,就让它先拿到,
* 也就是first-in-first-out,谁先等的,到时候有资源了,就先给谁,
* 如果为false的话,则没有顺序,大家一起等,如果有资源的话,谁先抢到算
* 谁的。
*/
public static Semaphore semaphore = new Semaphore(5,false);
public static void main(String[] args) {
for(int i=0;i<10;i++){
new Thread(){
public void run() {
try {
//拿灯!如果没有的话,就在这阻塞,知道有人release或者interrupte了它才可以接着往下走。
semaphore.acquire();
System.out.println(getName() + "..拿到一个灯");
//耗时操作
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放灯
semaphore.release();
}
};
}.start();
}
}
}
对于Android端这样的功能可以使用在网络请求的限制上。网络框架内部来限制。