類Semaphore(信號燈)的同步性:
多線程中的同步概念其實(shí)就是排著隊(duì)去執(zhí)行一個(gè)任務(wù)球昨,執(zhí)行任務(wù)是一個(gè)一個(gè)執(zhí)行彻亲,并不能并行執(zhí)行堕担,這樣的有點(diǎn)有助于程序邏輯的正確性介褥,不會出現(xiàn)非現(xiàn)場安全問題座掘,保證軟件在系統(tǒng)功能上的運(yùn)行穩(wěn)定性。
初步來看一個(gè)例子:
public static void main(String[] args) {
ExecutorService server = Executors.newCachedThreadPool();
final Semaphore sp=new Semaphore(3);
for(int i=0;i<10;i++){
Runnable r=new Runnable() {
@Override
public void run() {
try {
sp.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程:"+Thread.currentThread().getName()+"進(jìn)入柔滔,當(dāng)前已有"+(3-sp.availablePermits() )+"個(gè)并發(fā)");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程:"+Thread.currentThread().getName()+"即將離開了");
sp.release();
System.out.println("線程:"+Thread.currentThread().getName()+"離開了,還有:"+(3-sp.availablePermits()));
}
};
server.execute(r);
}