当多个线程同时运行时,为什么需要同步以避免访问共享资源时出现“问题”?
我对多线程编程和同步概念都很陌生。谁能解释一下吗?
最佳答案
假设这个方法:
private int value = 0;
public void computeStuff()
{
int tmp = value;
tmp++;
value = tmp;
}
假设有 1000 个线程调用此函数。如果没有同步,多个线程可以并行执行计算,并且不确定谁的结果将写入value
。在分配tmp
和最终分配value
之间,一个线程的执行可能会被中断。最终结果是 value
可能不等于 1000,但可能是某个更低的值。
通过在方法中添加synchronize
,所有线程都会一一调用它。是的,这会比没有同步时慢,因为某些线程将被迫等待挂起的锁。但好消息是我们保证结果将为 1000
。
(请注意,我知道这是一个愚蠢的例子 - 我喜欢愚蠢的例子)
关于java 如果一次运行一个线程为什么需要同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794340/