关于同步的意义

时间:2010-11-04 16:09:01

标签: java multithreading synchronized

这可能是一个愚蠢的问题但我不熟悉Java中的多线程编程。我创建了4个线程,然后在它们上调用了run方法。在run方法中我使用的是一个数组并且我正在分配值它是index.I看到每个线程都维护它自己的数组副本,并且没有线程不安全的行为。我只是想知道在这种情况下使用同步的意义是什么?(我认为它用于控制对共享资源的访问。这里的数组不应该是共享数据结构吗?)

4 个答案:

答案 0 :(得分:2)

否 - 如果每个线程使用自己的数组副本,那么您有四个独立的数组恰好包含相同的数据,但没有发生共享。

如果您有一个数组,并且所有四个线程都在该阵列上运行,那么共享将是共享的,至少两个线程可能同时使用相同的数据。在这种情况下,您需要同步以确保其中只有一个尝试(例如)在任何时间写入任何特定位置(或者如果正在阅读和另一个写作,则写入是以原子方式完成的,在写入之前完全读取,或者在写入之后完全读取 - 但是不允许两者重叠。“

答案 1 :(得分:1)

只要您完全确定数组完全不同(这里需要小心,因为根据您所做的事情可以指向同一个对象),那么您不需要同步数组。

答案 2 :(得分:0)

如果您的线程仅对自己的私有数据执行操作,则无需同步。

顺便说一句,你说你在线程上“调用了run方法”;直接调用Thread.run()不会在新线程中执行你的逻辑;你想要调用Thread.start()(它在一个单独的线程内部执行run())。

答案 3 :(得分:0)

这取决于你的意思“在运行方法中我使用数组”(强调使用)?如果你已经将数组的引用传递给线程,那么同步将阻止同时访问数组。但是,如果你在线程中的数组上创建一个实例,那么你有4个单独的数组实例,同步没有效果。< / p>