假设我有2个线程t1和t2,还有一个锁对象m。线程t1处于无限循环状态,在每次迭代中,它会获取m上的锁,执行一些工作,解锁m并立即重新开始。在一个迭代期间,t2请求对m的锁定,但被t1阻塞并等待。现在,当t1解锁m时,是否保证t2将获得下一个m的锁?或者t1可以在下一次迭代中悄悄超过它?
通常情况下,是否设置了等待线程的队列?如果t1拥有锁,并且所有其余想要该锁的线程按以下顺序被阻塞:t2,t3,...,那么剩余的线程会按照它们被阻塞的顺序继续执行(例如,t2运行,然后是t3等)?
(我简要查阅了Java规范,但没能找到答案。如果有,请告诉我,我会再仔细阅读。)
谢谢!(第一篇SO帖子,哇哦!)
通常情况下,是否设置了等待线程的队列?如果t1拥有锁,并且所有其余想要该锁的线程按以下顺序被阻塞:t2,t3,...,那么剩余的线程会按照它们被阻塞的顺序继续执行(例如,t2运行,然后是t3等)?
(我简要查阅了Java规范,但没能找到答案。如果有,请告诉我,我会再仔细阅读。)
谢谢!(第一篇SO帖子,哇哦!)
synchronized
语句是不公平的,其中“公平”是通过以下方式定义的(来自此处):“公平锁是指线程按照请求锁的顺序获得锁。” - heycosmo