- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
synchronized
不是方法签名的一部分。但是当我们覆盖一个方法时,决定被覆盖的方法是否编译的不仅仅是方法签名。
例如,我们不能添加或扩大检查异常
为什么 synchronized
在多态性中没有作用。一个synchronized
方法不应该在没有放置synchronized
的情况下被覆盖。因为使用父类(super class)变量的人可能认为所有方法都是线程安全的。
但非同步方法应该允许被synchronized
覆盖,因为它增加了更多的功能,但另一方面用户不会遇到任何错误,除了时间延迟。
我正在寻找一个合乎逻辑的解释,它可以阐明“为什么这样设计”。
最佳答案
A "synchronized" method should not be overridden without putting "synchronized".
错了。基类可能不是线程安全的,但子类可能有自己的同步,比如锁、无锁线程安全数据结构等。并不是所有的线程安全方法都是同步的,也不是所有的同步方法是线程安全的。
同样可以朝另一个方向发展(但可能会违反其他原则,视情况而定)
synchronized
不是面向对象的东西,而是一种运行时/执行现象和实现细节。它所做的只是acquire a monitor与 synchronized(this){ }
(或者如果是静态的则在 java.lang.Class 对象上同步)的方式相同。作为一个实现细节,将其暴露给 OOP 考虑是没有意义的。
注意:这并不意味着像 @ThreadSafe
这样的编译时注解没有意义。它确实如此,因为它引用方法的契约是线程安全的。 synchronized
不会这样做。
关于java - 为什么 "synchronized"对多态没有作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223988/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!