管程是一種用于協調并發程序訪問共享資源的軟件機制。在Java中,管程通常通過synchronized關鍵字來實現。synchronized關鍵字可以用于方法或代碼塊中,確保同一時間只有一個線程可以訪問被保護的代碼。以下是一個使用管程實現互斥訪問的示例:
class Counter { private int count = 0; synchronized void increment() { count++; } synchronized void decrement() { count--; } synchronized int getCount() { return count; } }
在上述示例中,所有訪問count的方法都被標記為同步方法,以確保任意時刻只能有一個線程修改count的值。管程的一個主要優點是容易理解和實現,并且保證線程安全。
信號量是一種計數器,用于控制多線程訪問共享資源的數量。信號量可以用于實現限流,防止資源過度使用。在Java中,信號量通常是Semaphore類的實例。以下是一個使用信號量實現限流的示例:
class RateLimiter { private Semaphore semaphore; public RateLimiter(int rate) { semaphore = new Semaphore(rate); } public void acquire() { semaphore.acquire(); } public void release() { semaphore.release(); } }
在上述示例中,RateLimiter類使用信號量來控制訪問共享資源的速率。通過調整信號量的計數器值,可以限制并發訪問的線程數量。Semaphore提供了acquire和release方法,用于獲取和釋放信號量的許可。如果許可數量已經達到信號量的上限,則acquire方法將會阻塞線程,直到有其他線程釋放了許可。
上一篇php gzip擴展
下一篇Java樹結構節點和