码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-06-27 13:32:57      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:ali   方法   循环   位置   并发   false   res   线程   ase   

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 块还是循环?为什 么?

标签:ali   方法   循环   位置   并发   false   res   线程   ase   

原文地址:https://www.cnblogs.com/programb/p/13019679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!