Maison >Java >javaDidacticiel >Comment utiliser Semaphore pour implémenter la limitation de courant en Java ?
Concept
1. Le sémaphore peut être considéré comme un sémaphore qui a été largement traduit en sémaphore. Conceptuellement, un sémaphore conserve un ensemble d'informations d'identification. Le thread qui obtient les informations d'identification peut accéder à la ressource et la libérer après utilisation. est terminé. Nous pouvons utiliser des sémaphores pour limiter les threads simultanés accédant à une ressource spécifique.
2. Cela peut se résumer simplement comme : un compteur, une file d’attente, et trois méthodes. Dans le modèle sémaphore, les compteurs et les files d'attente sont transparents et accessibles uniquement via les trois méthodes proposées par le modèle sémaphore, à savoir Internet, l'acquisition et la libération.
Instances
public class SemaphoreDemo { static class Link { } static class ObjPool<T, R> { final List<T> pool; final Semaphore semaphore; ObjPool(int size, T t) { pool = new Vector<>(size); for (int i = 0; i < size; i++) { pool.add(t); } semaphore = new Semaphore(size); } public R exec(Function<T, R> func) throws Exception { T t = null; semaphore.acquire(); try { System.out.println(Thread.currentThread().getName() + "---------争夺锁--------"); t = pool.remove(0); System.out.println(Thread.currentThread().getName() + " 拿到锁执行"); return func.apply(t); } finally { pool.add(t); semaphore.release(); } } } public static void main(String[] args) { ObjPool objPool = new ObjPool(5, new Link()); for (int i = 0; i < 30; i++) { new Thread(() -> { try { objPool.exec(t -> t.toString()); } catch (Exception e) { } }).start(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!