Как запрограммировать массив семафоров на Java? - PullRequest
2 голосов
/ 29 марта 2012

Я оглянулся и не могу найти ответ на этот вопрос.

Я пытаюсь запрограммировать массив из 6 семафоров. [С 1 по 6].

В настоящее время у меня есть это:

protected static Semaphore[] push;

Далее:

for (int i = 1; i <= 6; i++){
        push[i] = new Semaphore(0);
    }

Я не получаю ошибок за это:

protected static Semaphore mutex; 
mutex = new Semaphore(1);

Я получаю ошибку: Exception in thread "main" java.lang.NullPointerException

У меня такое ощущение, что это связано с тем, что я не объявляю размер массива, но я не уверен. Любой вклад приветствуется.

Ответы [ 2 ]

3 голосов
/ 29 марта 2012
protected static Semaphore[] push;

Пока вы не инициализируете его, статическая переменная будет null (именно поэтому вы получаете исключение NullPointerException при попытке доступа к вашему массиву).

Вам нужно инициализировать массив:

protected static Semaphore[] push = new Semaphore[6];
1 голос
/ 29 марта 2012

Как уже сказал Брендан, Semaphore[] push не инициализирован.

Semaphore[] push;            // "push" is null at this point (or not initialized)

push[0] = new Semaphore(0);  // NullPointerException, because you're accessing
                             // an array that's in fact still null

push = new Semaphore[6];     // "push" is now an initialized array

push[0] = new Semaphore(0);  // is now working

Кроме того, следующее прекрасно работает, потому что вы просто присваиваете объект переменной:

Semaphore mutex;             // "mutex" is not initialized -> null
mutex = new Semaphore(0);    // OK, since you're *assigning* the object
...