Ситуация такая: в пэкедже создается 6 энтити, которые в свою очередь являются потоками. Во время выполнения они заходят в saveTelegram
(для того чтобы получить id из базы) и получается так, что пара энтити имеют одинаковый id, по этому часть не записывается в таблицу.
Synchronized
не помогает, так как потоки не зависят друг от друга. Среди работающих вариантов решения проблемы были пауза thread.sleep(1000)
и автоинкрементить id сразу в таблице не заходя в saveTelegram
- но такое решение не подходит. Есть ли еще идеи как решить данную проблему?
@Lock(LockType.WRITE)
public Telegram saveTelegram(String ioNode, long userId,
String functionCode, byte[] payload) throws ProcessException {
TelegramId histObj = persistenceManager.findTelegramId();
Long entityId = histObj.getNextVal();//вытаскиваем id из таблицы TelegramId
persistenceManager.updateTelegramId(histObj);
TelegramHist telegramHist = createTelegram(entityId,
ioNode, userId, payload, functionCode);
telegramHist = persistenceManager.saveOrUpdate(telegramHistoric);//записываем энтити в другую таблицу
return telegramHist;
}
так как данную проблему решает thread.sleep(1000)
и две энтити ссылаются на один айдишник - я думаю что этот метод не потокобезопасный. И как решить данную проблему не знаю
надо в самом методе методА сделать возможность некого лока для потоков.
Одним из простых и рабочих решениях может быть использование try-lock ReentrantLock.
public class MyClass {
private final ReentrantLock lock = new ReentrantLock(true);
public Integer getMethodA() {
lock.lock();
try {
/// вот тут получение ID
return ID;
} finally {
lock.unlock();
}
Ну да тут наследование вообще никакой роли не играет. Самое простое это сделать метод статическим и синхронизированным(static synchronized) и будет синхронизация.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
столкнулся с проблемой редактирования view MaterialDateTimePicker, как это сделать? Например, хочу поменять backgroundColor у у нижнего элемента - mdtp_animator - как...
Я в андроиде еще новичек поэтому иногда не могу понять по каким причинам в нем происходят некоторые ошибки, в гугле ничего так и не нашел
Нужно сделать фон найденным словам в TextFlow
На SD есть папка с изображениемУ меня есть к ней путь