这与我之前的问题类似,因为我仍然不清楚同步关键字。
这次我会说得很短。
private int count = 0;
synchronized void increment() {
count++;
}
count 是一个实例变量,在 2 个线程之间共享。
如果线程 t1 和 t2 尝试增加计数,并且操作系统首先给 t1 增加计数的机会:-
t1 获取锁并原子地递增计数,递增计数所需的时间为 1 分钟(考虑)包括获取锁所需的时间。
但是线程 t2 呢,它必须等待锁被释放。 释放锁后,t2 现在以原子方式递增计数,这也需要 1 分钟。
因此,同步可以保证正确性,但执行起来也需要时间。线程的目的是在更少的时间内完成工作,那么为什么要在线程中使用同步,它的用途是什么。
我的理解正确吗?
最佳答案
是的,使用同步会带来性能损失。这里的并发是为了保证共享变量读写的完整性。在您的情况下,如果没有同步,t1和t2可能会读取具有相同值的count(例如1),因此当两个线程退出时,count的值是2,即使您应该期望它是3(因为它增加了两倍)
关于java - 同步性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161724/