Javaは同時マルチスレッドキーワードの数を制限しますSemaphore

タイトルなど:単一のJavaアプリケーションの場合、メソッドmethodA()の1つの同時呼び出しの数を100を超えないように制限するにはどうすればよいですか。100を超えると、超過した要求は直接nullを返すか、例外をスローします。

    private static Semaphore semaphore = new Semaphore(100);
 
    public static Integer methodA() {
        if(!semaphore.tryAcquire()) {
            return null;
        }
 
        try {
        // TODO 方法中的业务逻辑
        } finally {
            semaphore.release();
        }
    }

概念的には、セマフォはいくつかの許可を保持することと同じです。スレッドは、セマフォオブジェクトのacquire()メソッドを呼び出して許可取得し、release()を呼び出して許可を返すことができます。

1工法: 

Semaphoreには、Semaphore(int)とSemaphore(int、boolean)の2つの構築方法があります。パラメーターのintは、Semaphoreが持つライセンスの数を示し、booleanは、ライセンスを取得することが公正であるかどうかを示します。公正である場合は、複数のスレッドがライセンスを取得する場合、スレッドが来る順序に従ってライセンスが割り当てられます。そうでない場合、スレッドがライセンスを取得する順序は不確実です。

2ライセンスの取得 

取得には、acquire()、acquire(int)、tryAcquire()などを使用できます。intパラメーターは、一度に複数のライセンスを取得することを示し、デフォルトは1です。acquireメソッドは、ライセンスなしでライセンスを取得する必要があるスレッドです。ブロックし、権限がない場合、tryAcquire()メソッドはすぐにfalseを返し、権限を取得するスレッドはブロックされません。

3リリースライセンス 

スレッドはrelease()、release(int)を呼び出して、ライセンスを解放(返す)できます。スレッドは、release()を呼び出す前にacquireを呼び出す必要がないことに注意しください。

通常、スレッドプールで使用されます。

 

  • ルーキーとして、多くの場所がよく理解されていないことは避けられません。テキストに誤りがある場合は、直接(bu)、次に(yao)、(ma)out(wo)してください。

おすすめ

転載: blog.csdn.net/cyberHerman/article/details/88424444