public class Solution {
public static void main(String[] args) throws InterruptedException {
Counter counter1 = new Counter();
Counter counter2 = new Counter();
Counter counter3 = new Counter();
Counter counter4 = new Counter();
counter1.start();
counter2.start();
counter3.start();
counter4.start();
counter1.join();
counter2.join();
counter3.join();
counter4.join();
for (int i = 1; i <= 100; i++) {
if (values[i] != 1) {
System.out.println("Массив values содержит элементы неравные 1");
break;
}
}
}
public static Integer count = 0;
public static int[] values = new int[105];
static {
for (int i = 0; i < 105; i++) {
values[i] = 0; вот здесь массив values заполняется 0
}
}
public static void incrementCount() {
count++;
}
public static int getCount() {
return count;
}
public static class Counter extends Thread {
@Override
public void run() {
do {
synchronized (values) {
incrementCount();
values[getCount()]++;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
} while (getCount() < 100);
}
}
}
Сергей Сыс
29 уровень
Блин где массив заполняется единицей, не могу понять, ведь он полностью заполняется 0 в статическом блоке
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей Сыс
31 января 2022, 17:19
т.е. во время старта каждой нити incrementcount() увеличивает count(изначально равный 0) на 1, а затем в values[getCount()]++заполняется единицами?
0
Ksenia VolkovaJava Developer в DXCMaster
31 января 2022, 17:33
Счетчик count - общий для все нитей.
Каждая нить, пока счетчик не дойдет до 100, в цикле увеличивает его и помещает 1 в соответсвующую ячейку массива.
+1
Сергей Сыс
30 января 2022, 14:21
во время загрузки класса
0
Ksenia VolkovaJava Developer в DXCMaster
30 января 2022, 14:39
То есть до запуска нитей, так?
(И кстати, массив int и без статического блока будет изначально заполнен нулями).
0
Ksenia VolkovaJava Developer в DXCMaster
30 января 2022, 14:00
А статический блок когда выполняется?
0