Лучший способ вызвать общие методы из класса Callable? ⇐ JAVA
-
Anonymous
Лучший способ вызвать общие методы из класса Callable?
Я использую классы Java типа Callable (до 200 параллельно), которые вызывают метод класса инструмента (централизация общих методов), и я замечаю, что если этот метод не «синхронизирован», я получаю ошибки. Я попытался переместить этот метод в класс Callable, но проблема осталась.
При «синхронизированном» это работает, но боюсь, что эта настройка снизит производительность, так как задачи, запущенные параллельно, не смогут тогда быть полностью независимыми и будут тормозить друг друга, не работая на максимальной скорости.
Как лучше всего это реализовать?
Ниже (упрощенно) выдержка из моего кода. Без «синхронизации», похоже, не будет ошибок, пока сравнение данных не связано с датами. Но если метод сравнивает даты (вернее, смесь java.util.Date и Timestamp, которую я конвертирую в дату, а затем в строку), то получаю ошибки. Но метод работает нормально, потому что как только переключаюсь на синхронизированный, ошибок нет...
публичный класс CompareTableTF { ... общественный недействительный CompareTable (...) { ... пока (...) { пытаться { myTask = новый CompareTableTask(...); завершение.submit(myTask); } catch (InterruptedException | ExecutionException e) {...} ... } } публичный класс CompareTableTask реализует Callable { частный список row1; public CompareTableTask (Список row1) { this.row1=row1; } @Override публичный целочисленный вызов() { интервал результата = 1; List row2=getRowToCompare(...); если (isEqual(row2)) { результат = 0; } вернуть результат; } частное логическое значение isEqual(List row2) { ... for (int i=0; i
Я использую классы Java типа Callable (до 200 параллельно), которые вызывают метод класса инструмента (централизация общих методов), и я замечаю, что если этот метод не «синхронизирован», я получаю ошибки. Я попытался переместить этот метод в класс Callable, но проблема осталась.
При «синхронизированном» это работает, но боюсь, что эта настройка снизит производительность, так как задачи, запущенные параллельно, не смогут тогда быть полностью независимыми и будут тормозить друг друга, не работая на максимальной скорости.
Как лучше всего это реализовать?
Ниже (упрощенно) выдержка из моего кода. Без «синхронизации», похоже, не будет ошибок, пока сравнение данных не связано с датами. Но если метод сравнивает даты (вернее, смесь java.util.Date и Timestamp, которую я конвертирую в дату, а затем в строку), то получаю ошибки. Но метод работает нормально, потому что как только переключаюсь на синхронизированный, ошибок нет...
публичный класс CompareTableTF { ... общественный недействительный CompareTable (...) { ... пока (...) { пытаться { myTask = новый CompareTableTask(...); завершение.submit(myTask); } catch (InterruptedException | ExecutionException e) {...} ... } } публичный класс CompareTableTask реализует Callable { частный список row1; public CompareTableTask (Список row1) { this.row1=row1; } @Override публичный целочисленный вызов() { интервал результата = 1; List row2=getRowToCompare(...); если (isEqual(row2)) { результат = 0; } вернуть результат; } частное логическое значение isEqual(List row2) { ... for (int i=0; i
Мобильная версия