我正在尝试在java中创建一个信号量数组并将所有信号量初始化为1.我尝试了以下内容:private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};
但是我得到错误类型不匹配:无法从int转换为Semaphore。我怎样才能做到这一点?我不想先声明然后初始化,它必须在声明时初始化。 提前致谢
答案 0 :(得分:3)
您将int
值放入Semaphore
数组,因此类型不匹配。你需要
private static Semaphore [] sem = new Semaphore [] {new Semaphore(1),
new Semaphore(1), new Semaphore(1), new Semaphore(1), new Semaphore(1)};
答案 1 :(得分: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]);
}
}
答案 2 :(得分:0)
所有信号量是否都代表同一资源的许可证?在这种情况下,您不需要一个数组,只需一个Semaphore
对象,许可数为5或其他。另一方面,如果您拥有多个资源,则始终可以使用for
循环将信号量添加到数组中。