Size: a a a

2021 January 27

GV

Gukov Viktor in learn.java
setAccessible действует только на конкретный инстанс класса Field. Сами поля класса остаются неизменными
источник

K

Kitikot in learn.java
Gukov Viktor
setAccessible действует только на конкретный инстанс класса Field. Сами поля класса остаются неизменными
Тогда вдвойне странно.
Суть проблемы: есть код, который периодически стреляет IllegalAccessException.
Код выглядит примерно так:
try {
field.setAccessible(true);
// some logic
} finnaly {
field.setAccesible(false);
}
Я подозреваю, что в метод заваливаются два потока. Повторить через механизмы приложения не получилось. Но если руками создать десяток потоков с вызовом этого метода, тогда начинает стрелять IllegalAccessException. Думаю, то-ли synchronized вешать, то-ли убрать этот setAccessabile(false)
источник

GV

Gukov Viktor in learn.java
Kitikot
Тогда вдвойне странно.
Суть проблемы: есть код, который периодически стреляет IllegalAccessException.
Код выглядит примерно так:
try {
field.setAccessible(true);
// some logic
} finnaly {
field.setAccesible(false);
}
Я подозреваю, что в метод заваливаются два потока. Повторить через механизмы приложения не получилось. Но если руками создать десяток потоков с вызовом этого метода, тогда начинает стрелять IllegalAccessException. Думаю, то-ли synchronized вешать, то-ли убрать этот setAccessabile(false)
Ты же понимаешь, что у тебя просто конфликт?
1 поток устанавливает доступность true и идет в сторону кода логики
2 поток в это же время устанавливает доступность в false

В результате первый поток выстрелит IllegalAccess
источник

GV

Gukov Viktor in learn.java
Так как Field не потокобезопасный, доступ к нему нужно синхронизировать
источник

K

Kitikot in learn.java
Gukov Viktor
Ты же понимаешь, что у тебя просто конфликт?
1 поток устанавливает доступность true и идет в сторону кода логики
2 поток в это же время устанавливает доступность в false

В результате первый поток выстрелит IllegalAccess
Вот именно это я и понимаю. Я думаю, что с этим делать теперь. Были ли у человека, который писал этот код причины, поставить setAccessable(false) или это было сделано по наитию? И я могу этот файнали убрать
источник

ch

central hardware in learn.java
файнели же вообще может не выполнится
источник

V

Vlad in learn.java
central hardware
файнели же вообще может не выполнится
Это как?
источник

GV

Gukov Viktor in learn.java
Kitikot
Вот именно это я и понимаю. Я думаю, что с этим делать теперь. Были ли у человека, который писал этот код причины, поставить setAccessable(false) или это было сделано по наитию? И я могу этот файнали убрать
>И я могу этот файнали убрать
Попробуй убрать, погоняй тесты, посмотри под нагрузкой.
источник

GV

Gukov Viktor in learn.java
Vlad
Это как?
System.exit() например
источник

V

Vlad in learn.java
Gukov Viktor
System.exit() например
Эт понятно
источник

K

Kitikot in learn.java
Gukov Viktor
>И я могу этот файнали убрать
Попробуй убрать, погоняй тесты, посмотри под нагрузкой.
Ну я попробовал с synchronized. Работает корректно. Ладно, спасибо, пойду пробовать.
источник

DC

Denis Chikanov in learn.java
Gukov Viktor
System.exit() например
Это не самый удачный "например", потому что это (и прерывание или смерть треда) - единственные причины, по которым это может произойти
источник

A

Alex in learn.java
я посмотрел видео, не додумался пока почему так?
источник

АА

Альберт Авагян... in learn.java
Нет(
Первый день в джаве и еще не знаю всякие нюансы и в чем может быть причина
источник

A

Alex in learn.java
а тут джава не при чем
источник

A

Alex in learn.java
@al_1472_av что делает ключевое слово break?
источник

АА

Альберт Авагян... in learn.java
Alex
@al_1472_av что делает ключевое слово break?
выходит из цикла
источник

АА

Альберт Авагян... in learn.java
вот, на шарпе написал, всё норм
источник

A

Alex in learn.java
ну в общем, ответ простой - в случае успешного выполнения break выходит из цикла и все. в случае эксепшена выход из цикла не осуществляется (это помимо того что писать так не стоит с точки зрения языка)
источник

A

Alex in learn.java
инструмент должен использоваться корректно относительно своей задачи. если задача в том чтоб считать числа и посчитать формулу в дальнейшем, то бесконечный цикл вообще не нужен
источник