信号量解决了锁一次只能让一个线程访问资源的问题,信号量可以指定多个线程,同时访问一个资源。acquire()方法会尝试获得许可,若无法获得,则继续等待,直到获得许可。访问结束后,释放资源。
public class SemapDemo implements Runnable {
final Semaphore semp=
new Semaphore(
5);
@Override
public void run() {
try {
semp.acquire();
Thread.sleep(
2000);
System.out.println(Thread.currentThread().getName()+
"done"+System.currentTimeMillis()/
1000);
semp.release();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ExecutorService exec=Executors.newFixedThreadPool(
15);
final SemapDemo semapDemo=
new SemapDemo();
for(
int i=
0;i<
15;i++)
{
exec.submit(semapDemo);
}
}
}