我们都从Java并发中学到的第一件事就是我们使用锁(synchronized keyword, Lock/ReadWriteLock interface
)防止并发访问。例如:
synchronized void eat(){
//some code
}
从理论上讲,该方法eat()
可以由单个线程执行。即使有许多线程在等待执行它,也只有一个执行该锁。但是随之而来的是并行性,这使我对我刚才说的事情三思而行。
我有4核CPU。这意味着我可以并行执行4个任务。是的,锁可以由单个线程获取。但它可能发生的4个线程调用方法eat()
,并采取锁定在字面上同时,虽然有锁需要被收购实际上做什么?
Java中是否可以发生类似的事情?我猜不能,但是我不得不问这个。我刚才说的一个案件怎么办?
... 4个线程...同时锁住...
不会发生 任何“同步”操作(例如“带锁”)都必须在系统的主内存上进行操作,并且在任何常规计算机系统中,只有一条内存总线。一个以上的CPU实际上不可能同时访问主内存。
如果两个CPU实际上决定同时访问内存,则硬件将保证其中一个将“赢得比赛”并先行,而另一个则被迫等待。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句