【问题标题】:Java ExecutorService threads with functions that don't support threading具有不支持线程的函数的 Java ExecutorService 线程
【发布时间】:2020-07-11 06:04:18
【问题描述】:

我正在尝试将多线程用于相当繁重的图像处理程序。多线程主要工作得很好,并且减少了我的运行时 x4。但是,我使用的一些外部库在被多线程执行时不是很稳定,我偶尔会收到反映这一点的错误(例如,实际上没有图像为空时出现空图像错误等)

我已经确定了两个属于外部库 (opencv) 的此类函数,如果可能的话,我想隔离它们,以便当线程访问该函数时,它总是等待前一个线程完成 - 这样有问题的函数永远不会在给定时间执行超过一次。

这可以在 Java 中实现吗?怎么样?

谢谢

更新:synchronized Java 函数不起作用。偶尔(很难重现,这就是为什么它如此令人沮丧)我会看到一个 opencv 错误来自一个在 99.9% 的运行中都能正常工作的函数。

我最近遇到的一个错误示例,与opencv fillPolyfunction 相关:

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’

【问题讨论】:

  • 这些功能是较大管道中的较小部分,除了某些“小道路”外,它们大部分是平行的,还是它们是被明确调度的部分?
  • 它们是较大的图像处理和操作管道/工作流的较小部分

标签: java multithreading opencv image-processing executorservice


【解决方案1】:

您可以使用 Java 中的同步轻松实现这一目标。同步将使该方法一次只能被一个线程访问。你可以在 google 上找到很多关于同步的文章。

例如:

    synchronized void yourMethodname(int x){//synchronized method  

// Your code block inside.

}

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多