在Android应用程序上工作时,我偶然发现了一些内容,希望得到您对该主题的意见/帮助。
所以,基本上,我创建了几个在不同线程中运行的Runnable
。所有这些Runnable
都会调用运行这些ApplyContrast(...)
的类SomeClass
中的方法Runnable
(或多或少同时)。
此ApplyContrast(...)
方法可访问和修改同一个类int[]
的{{1}}。
所以我想知道这是否可能是一个问题? 我问这个是因为当我在一个以上的线程上运行时,我没有得到预期的结果。
P.S:即使有SomeClass
的并发访问,线程也没有访问数组的相同部分(或者不应该这样做:P)
欢迎任何帮助。如果您需要更多信息,请询问。
int[]
更新#1:
添加更多关于(错误)结果的信息:
正如我上面所说,每当我在多个线程中进行数据处理时,我都无法获得预期的结果。 当数据处理在多个线程 中完成时,第一个线程(已运行)中处理的数据是正确的。
以下是一些图片,用于显示原始图像,预期结果以及多线程时获得的实际结果图像:
(不要介意图像顶部和底部的蓝色部分)
你可以看到,在最后一张图片中我们有" 2部分"。第一部分(在顶部)是由第一个线程处理的(正确完成)和第二部分(在底部)由所有剩余线程处理(这是错误的)。
答案 0 :(得分:0)
我认为没关系。
可以从多个线程访问数组pixels
(可能别名为mPixels
)。这会使它不正确。
但是,看起来您正在对数组进行分块访问,以便每个线程只访问自己的块。只要多个线程永远不会访问数组中的相同位置,代码就是正确的。
但是,我得说,这是非常令人困惑的。我会说变量len
被错误命名。当然,并发正确性确实很难确定。我相信它可以写得更清楚,并且由于容易出错,所以非常值得这样做。