关于synchronized不公平锁

来源:5-12 共享锁和排它锁的用法

灵森

2020-03-30

for (int i = 0; i < 2; i++) {
synchronized (queuelock){
// queuelock.lock();
try {
Integer duration = new Random().nextInt(1) + 1;
System.out.println(Thread.currentThread().getName() + " 正在打印,需要 " +
duration + " 秒");
try {
Thread.sleep(duration * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} finally {
// queuelock.unlock();
}
}

        打印:

Thread-0开始打印
Thread-0 正在打印,需要 1 秒
Thread-1开始打印
Thread-2开始打印
Thread-3开始打印
Thread-4开始打印
Thread-5开始打印
Thread-6开始打印
Thread-7开始打印
Thread-8开始打印
Thread-9开始打印
Thread-0 正在打印,需要 1 秒
Thread-0打印完毕
Thread-9 正在打印,需要 1 秒
Thread-9 正在打印,需要 1 秒
Thread-9打印完毕
Thread-8 正在打印,需要 1 秒
Thread-8 正在打印,需要 1 秒
Thread-8打印完毕

synchronized难道不是阻塞队列,而是阻塞栈吗老师?

写回答

1回答

悟空

2020-03-30

最好不要用一个可变对象来做为锁对象,你可以用一个独立的Object

1
4
灵森
回复
悟空
好的,感谢
2020-03-30
共4条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程