这是我最近问过的受访者的一些问题,这些受访者说他们知道Java并发性:
- 解释“内存可见性”的危害-JVM可以对不受监视器保护且未声明的变量重新排序某些操作的方式
volatile
,以使一个线程可能看不到另一个线程所做的更改。通常,我通过显示存在此危害的代码来问这个问题(例如NoVisibility
,Goetz等人的“ Java Concurrency in Practice”中的清单3.1中的示例),并询问出了什么问题。 - 说明不仅
volatile
影响声明的实际变量volatile
,而且还影响线程在更改volatile
变量之前对变量所做的任何更改。 - 为什么用
volatile
代替synchronized
? - 使用
wait()
和实现条件变量notifyAll()
。说明为什么要使用notifyAll()
。说明为什么要使用while
循环测试条件变量。
我的问题是-这些是适当的还是太高级了,无法问一个知道Java并发的人?
而当我们讨论它时,您是否认为应该期望从事Java并发工作的人员对Java垃圾回收的了解高于平均水平?
notifyAll()
“我不相信要进行OS调度程序的工作,那么我会使用notify()
”