作者回复:
是这样的,synchronized不保证(强调不保证)是公平锁。但是并不代表实际在某个具体程序的某次运行时,他的表现是和公平锁一样的。
只要有不公平的可能,就不能说是公平锁。要能百分之百保证在任何情况下都是公平锁,代价很高。synchronized是随缘公平,不保证公平。
作者回复: synchronised是不公平锁。主线程也没有什么优先权。现象一样还是因为代码太简单,也没有引入随机因素(不敢乱搞,否则录视频的时候太乱)。你可以试试看把sleepSec改成下面的样子,运行的结果就会有意思一点。
private static void sleepSec(int sec) {
try {
Thread.sleep(TimeUnit.SECONDS.toMillis(sec) + (int) (Math.random() * 200));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
作者回复:
第一个线程在sleep的时候,别的线程也在sleep呀
作者回复: sleep不会失去synchronized锁