Java--可重入锁

可重入锁:在一个锁的获取中,可允许多个线程获取该锁。

public class SemapDemo implements Runnable {

    private Semaphore semaphore = new Semaphore(5);

    @Override
    public void run() {
        try {
            semaphore.acquire(2);

            // 模拟耗时操作
            Thread.sleep(2000);
            System.out.println(Thread.currentThread().getId() + ":deno!");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release(2);
        }
    }

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(20);
        SemapDemo semapDemo = new SemapDemo();

        for (int i = 0; i < 20; i++) {
            executorService.submit(semapDemo);
        }
    }
}

代码中,对锁的获取可允许两个线程获取。执行可发现不停的会有两条语句刷出来。

猜你喜欢

转载自blog.csdn.net/BtWangZhi/article/details/80876268