0

Javaでセマフォ配列を作成し、すべてのセマフォを1に初期化しようとしています。次のことを試しました。private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};

しかし、「タイプの不一致:intからSemaphoreに変換できません」というエラーが表示されます。これどうやってするの?最初に宣言してから初期化する必要はありません。宣言時に初期化する必要があります。前もって感謝します

4

3 に答える 3

4

int値を配列に入れているSemaphoreため、型が一致していません。あなたが必要です

private static Semaphore [] sem = new Semaphore [] {new Semaphore(1),
     new Semaphore(1), new Semaphore(1), new Semaphore(1), new Semaphore(1)};
于 2013-01-03T00:42:58.407 に答える
1

Semaphore(int permits)コンストラクターを使いたいと思います。

それを行う唯一の方法は次のとおりです。

private static Semaphore [] sem = new Semaphore [] {
   new Semaphore(1),
   new Semaphore(1),
   new Semaphore(1),
   new Semaphore(1),
   new Semaphore(1)
};

またはループを使用します(インスタンスの配列がはるかに長いfor場合、このアプローチは完全に正常に機能します)。Semaphore

private static Semaphore [] sem = new Semaphore [5];
static {
    for(int i = 0; i < 5; i++) {
        sem[i] = new Semaphore(1);
    }   
}

またfor、セマフォ許可が順番に並んでいない場合(または構成ファイルから許可をロードする場合)、ループは完全に正常に機能します。

private static Semaphore [] sem;

static {
    int [] semaphorePermits = {1,2,3,1,2,2,2,2,4,5,2,1,2,3,4,5,3,2,12,1,2,23,3};
    sem = new Semaphore[semaphorePermits.length];

    for(int i = 0; i < semaphorePermits.length; i++) {
        sem[i] = new Semaphore(semaphorePermits[i]);
    }   
}
于 2013-01-03T00:45:08.863 に答える
0

すべてのセマフォは、同じリソースに対する許可を表しますか?その場合、配列は必要ありませんSemaphore。許可カウントが5などの単一のオブジェクトだけが必要です。一方、複数のリソースがある場合は、forループを使用していつでもセマフォを配列に追加できます。

于 2013-01-03T00:44:48.223 に答える