java 如果一次运行一个线程为什么需要同步
java if one thread run at a time why need synchronization
当多个线程同时运行时,为什么需要同步以避免访问共享资源时"problems"?
我对多线程编程和同步概念都不熟悉。谁能解释一下?
假设这个方法:
private int value = 0;
public void computeStuff()
{
int tmp = value;
tmp++;
value = tmp;
}
假设有 1000 个线程调用它。如果没有同步,多个线程可以并行执行计算,并且不确定谁的结果将写入value
。一个线程的执行可能会在 tmp
的赋值和 value
的最终赋值之间中断。最终结果将是 value
可能不等于 1000,但可能是一些较低的值。
在方法中加入synchronize
,所有线程都会一一调用。是的,这会比没有 synchronize
慢,因为一些线程将被迫等待挂起的锁。但好消息是我们保证结果会是 1000
.
(请注意,我知道这是一个愚蠢的例子——我喜欢愚蠢的例子)
当多个线程同时运行时,为什么需要同步以避免访问共享资源时"problems"?
我对多线程编程和同步概念都不熟悉。谁能解释一下?
假设这个方法:
private int value = 0;
public void computeStuff()
{
int tmp = value;
tmp++;
value = tmp;
}
假设有 1000 个线程调用它。如果没有同步,多个线程可以并行执行计算,并且不确定谁的结果将写入value
。一个线程的执行可能会在 tmp
的赋值和 value
的最终赋值之间中断。最终结果将是 value
可能不等于 1000,但可能是一些较低的值。
在方法中加入synchronize
,所有线程都会一一调用。是的,这会比没有 synchronize
慢,因为一些线程将被迫等待挂起的锁。但好消息是我们保证结果会是 1000
.
(请注意,我知道这是一个愚蠢的例子——我喜欢愚蠢的例子)