线程同步类:Semaphore

Semaphore: 控制访问线程资源数量类

构造方法:

// permits为访问线程的数量
Semaphore semaphore = new Semaphore(int permits);

主要方法:
semaphore.acquire() : 获取运行许可,并阻塞其他线程
semaphore.release() : 释放许可,让其他线程运行

使用场景:

控制该段代码,每次最多两个线程执行
代码:
线程类:

class JymSemaphoreThread implements Runnable{
    // 控制访问线程资源数量类
    private Semaphore semaphore;

    public JymSemaphoreThread(Semaphore semaphore) {
        this.semaphore = semaphore;
    }

    public void run() {
        try {
            // 获取运行许可,并阻塞其他线程
            semaphore.acquire();
            System.out.println(Thread.currentThread().getName() + "阻塞并获取许可");
            // 释放许可,让其他线程运行
            System.out.println(Thread.currentThread().getName() + "释放许可");
            semaphore.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

测试代码:

    public static void main(String[] args) {
    	// 每次最多两个线程访问资源,当有线程调用release方法后才会有线程进入
        Semaphore semaphore = new Semaphore(2);
        JymSemaphoreThread jymSemaphoreThread = new JymSemaphoreThread(semaphore);
        for(int i = 0 ; i<5 ;i++){
            new Thread(jymSemaphoreThread).start();
        }
    }

结果:
在这里插入图片描述

学习年限不足,知识过浅,说的不对请见谅。

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发布了71 篇原创文章 · 获赞 54 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/weixin_43326401/article/details/104121396