gpt4 book ai didi

java - Java编译器不应该强制同步吗?

转载 作者:行者123 更新时间:2023-12-01 23:26:34 25 4
gpt4 key购买 nike

考虑以下场景。

public synchronized String getData(){
return getInfo();
}
private String getInfo(){
// operation here should synchronized
return "Synchronize Info";
}

如果有人绕过此操作的流程。系统可能会变得不稳定,如果Java编译器强制使getInfo synchronized这样的问题就不会出现。但Java编译器并不强制这样做。现在开发人员应该负责是否使 getInfo synchronized 。为什么Java不强制使 getInfo synchronized

最佳答案

Java 编译器不可能有效地强制执行此操作。您可以发明一条规则,即同步方法只能调用同一对象(如果它们是同步的)的方法,但除了在非常狭窄的场景中之外,它没有任何帮助。如果 getInfo() 是公共(public)的,getData() 可以轻松调用不同的类,该类会回调原始对象上的 getInfo()

此外,同步可以用于单个语句而不是整个方法,并且有other locks也。尝试设计编译器规则来防止同步代码在所有这些情况下使用非同步数据将是复杂的或不可能的。

实际上,当知道只有线程正在使用该对象时,有时想要调用一个没有同步成本的方法是合理的。决定对象的哪些部分应该被锁定以及何时锁定是一个复杂的设计问题,只有人类程序员才能做到。

所以Java不能/不会阻止你编写不安全的代码。它不在乎。如果“系统”指的是“计算机”,它不会“变得不稳定”。最坏的情况是,该类会出现问题。

关于java - Java编译器不应该强制同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899276/

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