你是如何调用 wait()方法的?使用 if 块还是循环?为什 么?

Posted programb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你是如何调用 wait()方法的?使用 if 块还是循环?为什 么?相关的知识,希望对你有一定的参考价值。

wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条

件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段

标准的使用 wait 和 notify 方法的代码:

// The standard idiom for using the wait method

synchronized (obj) {

while (condition does not hold)

obj.wait(); // (Releases lock, and reacquires on wakeup)

... // Perform action appropriate to condition

}

参见 [Effective Java]第 69 条,获取更多关于为什么应该在循环中来调用 wait

方法的内容。

###7、什么是多线程环境下的伪共享(false sharing)?

伪共享是多线程系统(每个处理器有自己的局部缓存)中一个众所周知的性能问

题。伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如

下图所示:

有经验程序员的 Java 面试题

伪共享问题很难被发现,因为线程可能访问完全不同的全局变量,内存中却碰巧

在很相近的位置上。如其他诸多的并发问题,避免伪共享的最基本方式是仔细审

查代码,根据缓存行来调整你的数据结构。

以上是关于你是如何调用 wait()方法的?使用 if 块还是循环?为什 么?的主要内容,如果未能解决你的问题,请参考以下文章

面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!

Java多线程为什么使用while循环来调用wait方法

Java多线程为什么使用while循环来调用wait方法

Java多线程为什么使用while循环来调用wait方法

如何在不是线程的对象上调用 wait() 和 notify() 方法?

JAVA多线程之wait/notify