gpt4 book ai didi

java - 存在并发方法调用时的事件顺序保证

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:41 26 4
gpt4 key购买 nike

class server {
private Vector<Msg> v = new ...
...
public void deliver(Msg msg) {
...
v.add(msg);
}
}

class client {
private server s = server.getInstance(); // singleton
...
public void propose() {
s.deliver(new Msg( ... ));
}
}

如果多个并发客户端通过 [non-synchronized!] deliver 方法向服务器传递一个值(Msg 对象),是否可以假设任何客户端调用 [或者更准确地说,输入] deliver 首先将其值存储在 v 中 – 或者使 deliver 同步强制执行这个假设成立吗?

最佳答案

不,您不能做出这样的假设,因为调度程序可以中断 deliver() 中但尚未进入 v.add(msg) 的当前线程>。调度程序切换到另一个调用 deliver() 的线程(之后),但设法完成了整个 deliver() 调用。

如果同步deliver() 方法,它不会同时阻止调度程序中断执行。但是当第一个线程持有锁时,没有其他线程能够进入该方法,最终调度程序将唤醒原始线程并让他完成。

顺便说一句 Vector很古老,有更好的选择。

关于java - 存在并发方法调用时的事件顺序保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495258/

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