gpt4 book ai didi

java - 显式锁与隐式锁实现

转载 作者:行者123 更新时间:2023-11-29 03:15:55 25 4
gpt4 key购买 nike

两个示例场景:

首先:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com