gpt4 book ai didi

java - 调用同步/等待?

转载 作者:行者123 更新时间:2023-12-03 00:57:29 29 4
gpt4 key购买 nike

谁能帮我理解这一点吗?

如果我们有一个类:

public class Sample{
public synchronized method1(){ //Line1
....
wait(); //Line2
....
}
}

现在,当 3 个新线程尝试调用同一对象上的方法“method1”时

Sample s = new Sample();
Thread t1 = new Thread(); // t2 and t3

在每个线程的 run 方法内部,我们调用 s.method1()。那么,这里是如何运作的呢?当t1访问method1时,就进入该方法并调用wait。当其他线程尝试访问 method1 时怎么办?

由于同步一次只允许一个线程访问对象实例,因此它们是否会在方法 1 上被阻塞?或者他们进入等待状态?

最佳答案

在对象上获得锁定。在这种情况下,由于只有一个对象s,所有线程都在该对象上尝试调用相同的方法method1,因此只有一个线程可以进入该方法。

What about the rest of the threads when it tries to access method1?

您正在此对象上调用 wait,因此锁被释放,其他线程将获得机会,但最后所有 3 个线程都会到达处于阻塞状态,因为没有人通知它。

所有 3 个线程的 wait() 语句之后不会执行任何操作。

Do they get blocked on the method1 since synchronization allows only one thread to access the object instance at a time?

wait() 释放锁,因此这不会阻止其他线程访问相同的方法,但如果您没有调用 notify 那么最后所有线程都会进入阻塞状态。

尝试将其形象化

enter image description here

enter image description here

关于java - 调用同步/等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039045/

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