Я пытаюсь использовать многопоточность для довольно тяжелой программы обработки изображений. Многопоточность в основном работает отлично и уменьшает мое время выполнения x4. Однако некоторые внешние библиотеки, которые я использую, не очень стабильны, когда выполняются несколькими потоками, и я иногда получаю ошибки, которые отражают это (например, ошибка пустого изображения, когда на самом деле нет пустых изображений и т. Д. c.)
Я определил две такие функции, которые принадлежат внешней библиотеке (opencv), и я хотел бы изолировать их, если это возможно, чтобы при достижении потоком этой функции он всегда ожидал завершения предыдущего потока sh - таким образом проблемные функции c никогда не будут выполняться более одного раза в данный момент времени.
Может ли это быть достигнуто в Java? Как?
Спасибо
ОБНОВЛЕНИЕ: synchronized
Java функция не работает. Иногда (трудно воспроизвести, поэтому это так расстраивает), я вижу ошибку opencv, исходящую из функции, которая отлично работает на 99,9% запусков.
Пример ошибки, которую я недавно получил, и относится к функции opencv fillPoly
:
ERROR main.java.com.ibm.staple.Staple - cv Exception: OpenCV(4.0.0) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\drawing.cpp :2403 error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function ‘cv::fillPoly’