我正在尝试在 java 中创建一个信号量数组并将所有信号量初始化为 1。我尝试了以下操作:private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};
但我收到错误类型不匹配:无法从 int 转换为信号量。我怎样才能做到这一点?我不想先声明再初始化,声明的时候一定要初始化。提前致谢
我正在尝试在 java 中创建一个信号量数组并将所有信号量初始化为 1。我尝试了以下操作:private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};
但我收到错误类型不匹配:无法从 int 转换为信号量。我怎样才能做到这一点?我不想先声明再初始化,声明的时候一定要初始化。提前致谢
您将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
循环将信号量添加到数组中。