semaphore 是 java 并发编程中控制多线程资源访问的机制,通过创建许可证来实现,初始化时指定许可证计数,表示线程可以同时访问受保护资源的数量,当线程尝试访问资源时,它会尝试获取许可证,如果没有可用许可证,线程将被阻塞,直到许可证可用。
Java 函数的并发和多线程中 Semaphore 的作用
Semaphore 是 Java 并发编程中的一个重要机制,用于在多线程场景下控制资源的访问。它通过为保护资源的共享数据结构创建许可证来实现这一点。
作用原理
Semaphore 初始化时会指定一个许可证计数,该计数表示最多有多少个线程可以同时访问受保护的资源。当一个线程尝试访问资源时,它会尝试获取 semaphore 上的一个许可证。如果可用,许可证会被授予,线程可以访问资源。如果没有许可证可用,线程将被阻塞,直到许可证可用为止。
实战案例
假设我们有一个共享资源,即一个队列。只有 5 个线程可以同时访问该队列。我们可以使用 Semaphore 来确保这一点:
import java.util.concurrent.Semaphore; import java.util.Queue; public class Example { private static final int MAX_ACCESS_COUNT = 5; private static Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT); private static Queue<Integer> queue = new ConcurrentLinkedQueue<>(); public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(() -> <a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/16380.html" target="_blank">access</a>Queue()).start(); } } private static void accessQueue() { try { // 尝试获取一个许可证 semaphore.acquire(); // 访问队列 queue.add((int) (Math.random() * 100)); // 释放许可证 semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }
登录后复制
在这种示例中,semaphore 被初始化为具有 5 个许可证。这确保了最多只有 5 个线程可以同时访问队列。其他线程将被阻塞,直到许可证可用为止。
结论
Semaphore 在控制并发访问共享资源方面非常有用。通过限制可以同时访问资源的线程数量,它有助于防止数据竞争和不一致。
以上就是Java函数的并发和多线程中Semaphore的作用是什么?的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:牧草,转转请注明出处:https://www.dingdanghao.com/article/413442.html