0

我正在尝试在 java 中创建一个信号量数组并将所有信号量初始化为 1。我尝试了以下操作:private static Semaphore [] sem = new Semaphore [] {1,1,1,1,1};

但我收到错误类型不匹配:无法从 int 转换为信号量。我怎样才能做到这一点?我不想先声明再初始化,声明的时候一定要初始化。提前致谢

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 回答