- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
两个示例场景:
首先:
public synchronized void foo1(){
.....
}
public void foo2(){
.....
}
threads 循环是:
public void run() {
while (true) {
foo1();
foo2();
}
}
如果我运行 10 个线程,其中一个在 foo1()
内获取锁,其他想要执行 foo1
的线程将在 foo1()
或者它们可以在 foo2
中循环并执行代码?
第二个:
public void foo1(){
lock.lock();
....
lock.unlock();
}
public void foo2(){
}
threads 循环是:
public void run() {
while (true) {
foo1();
foo2();
}
}
如果我运行 10 个线程,其中一个在 foo1()
中获取锁,在这种情况下,想要执行 foo1
的线程不会在 外部被阻塞foo1
?
最佳答案
if i run 10 threads, and one of these acquire lock inside foo1() other threads which want to execute foo1 will wait outside foo1() or they can loop and execute code inside foo2?
假设它们在同一个对象上被调用,它们将在需要执行 foo1()
时全部排队。任何已经完成 foo1()
的那个迭代都可以执行 foo2()
...但是会在下一次迭代时再次排队当他们需要执行 foo1()
时。
if i run 10 threads, and one of these acquire lock inside foo1() , in this case threads which want to execute foo1 are not blocked outside foo1?
嗯,它们不会在外部 foo1()
被阻塞,但它们会在内部 foo1()
.
您可能会看到示例之间的唯一区别在于堆栈跟踪。从根本上说,在这两种情况下,执行 foo1()
的主要 block 都需要线程拥有锁。
(请注意,您的 unlock
调用应该在 finally
block 中。)
关于java - 显式锁与隐式锁实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687421/
我是一名优秀的程序员,十分优秀!