Javaでセマフォ配列を作成し、すべてのセマフォを1に初期化しようとしています。次のことを試しました。private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};
しかし、「タイプの不一致:intからSemaphoreに変換できません」というエラーが表示されます。これどうやってするの?最初に宣言してから初期化する必要はありません。宣言時に初期化する必要があります。前もって感謝します
Javaでセマフォ配列を作成し、すべてのセマフォを1に初期化しようとしています。次のことを試しました。private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};
しかし、「タイプの不一致:intからSemaphoreに変換できません」というエラーが表示されます。これどうやってするの?最初に宣言してから初期化する必要はありません。宣言時に初期化する必要があります。前もって感謝します
int
値を配列に入れているSemaphore
ため、型が一致していません。あなたが必要です
private static Semaphore [] sem = new Semaphore [] {new Semaphore(1),
new Semaphore(1), new Semaphore(1), new Semaphore(1), new Semaphore(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]);
}
}
すべてのセマフォは、同じリソースに対する許可を表しますか?その場合、配列は必要ありませんSemaphore
。許可カウントが5などの単一のオブジェクトだけが必要です。一方、複数のリソースがある場合は、for
ループを使用していつでもセマフォを配列に追加できます。