java如果一个线程一次运行,为什么需要同步

时间:2015-01-06 07:55:53

标签: java multithreading synchronization

当多个线程同时运行时,为什么需要同步以避免出现问题"访问共享资源时?

我是多线程编程和同步概念的新手。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

假设这个方法:

private int value = 0;

public void computeStuff()
{
    int tmp = value;
    tmp++;
    value = tmp;
}

假设有1000个线程调用它。如果没有同步,几个线程可以并行执行计算,并且不确定其结果是否会写入value。一个线程的执行可能在tmp的分配和value的最终分配之间中断。最终结果是value可能不等于1000,但可能会有更低的值。

通过向方法添加synchronize,所有线程将逐个调用它。是的,这比没有synchronize要慢,因为一些线程将被迫等待挂起锁。但好消息是我们保证结果将是1000

(请注意,我知道这是一个愚蠢的例子 - 我喜欢愚蠢的例子)