- 信号量解决了锁一次只能让一个线程访问资源的问题,信号量可以指定多个线程,同时访问一个资源。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);
}
}
}