如果不是关键字我们有@Synchronized
注释它会不好吗?在这种情况下注释是否更自然(因为您可以用非同步方法覆盖方法 - 因此对该方法本身没有提到任何内容,而是指定除了该方法之外的某些内容(该方法在某个特定所以它不是一个真正的关键字?)可能同步已注释?
可能同步已注释?
回答
同步转换实际上直接转换为字节代码级的monitorenter/monitorexit。你指定什么同步,你不能做到这一点与注释:
synchronized (myLock) {
}
所以它非常有意义,我认为这是一个关键字。
因此,然后同步不是一个关键字,而是一个有趣的方式来指定函数参数(参数是一个代码块),否则在Java中是不可能的? –
提供字节码+1(这意味着它不等于方法调用)。 –
@Frank Pavageau您可能会详细阐述一下吗? –
同步用于代码块,并且不能将注释添加到代码块。
您可能在方法或类上有@synchronized
,但是Java在首次引入Java时不支持注释。
我认为它足够重要,值得拥有自己的关键字。 ;)
你说的足够重要,值得一个关键字,但是,一个函数可以转换为关键字非常重要,我们可能会有Object.startSynchronize(lock)和endSynchronize(lock)? –
使用lock()和unlock()的问题是您增加了可能忘记解锁的风险,因此您需要添加try/finally块,就像使用Lock一样(但增加了复杂性,使其更容易出错)关闭这个问题应该减少,但这是在Java 8中,它可能不会像版本来的那样高效和干净。 –
可能作为同步的方法版本,是的。但另一种使用synchronized可以让你指定你正在同步的显示器。
public void someMethod()
{
synchronized(this)
{
//sync code
}
//unsynced code.
}
这将是很酷,但注释不能完全替代关键字:有是同步的,不能标有注释块。
此外synchronized块接受用于同步的监视器。它可以动态提供,给我们一定的灵活性。注释不允许这样做,因为必须在编译时提供所有参数。
那么让一个关键字来完成一个函数的工作是一个奇怪的决定?我们可能会有像Object.synchronize(对象锁)的东西会一样吗?我的意思是,同步可能不是一个真正的关键字? –
- 1. 功能注释
- 2. ExecutorService vs异步注释
- 3. 同步方法可能不会释放锁
- 4. 获取已注册的注释
- 5. 可能注释掉JSTL代码?
- 6. 是否有可能调整注释ti.map
- 7. 抽象类的XmlRootElement注释 - 可能吗?
- 8. 错误:可能需要类型注释
- 9. 如何注释掉已有多行注释的代码块?
- 10. 两个完全不同的JAXB注释类,相同的@XmlElement名称。可能?
- 11. 缓存注释信息的地图是否需要同步?
- 12. 在C#中同步接口和实现注释的方法
- 13. Java注释处理:访问未注释类的“元素”可能吗?
- 14. 将可用的注释功能扩展到另一个自定义注释
- 15. 您可以通过散步对象树来阅读注释
- 16. 注释处理编译步骤
- 17. 注释步骤配置,如何检验
- 18. 确保所有更改都已注释
- 19. 我的PHP代码已被注释掉
- 20. Mapkit,如何检测注释已加载
- 21. Java注释javaArgs和LiteralArguments已弃用
- 22. GeoServer和MapServer注释功能
- 23. 功能注释结束
- 24. Scichart不能删除注释
- 25. tortoisehg中的注释功能
- 26. Php-Di注释性能
- 27. @ Mule中的功能注释
- 28. MySQL列注释和性能
- 29. 同步功能
- 30. 同步性能
似乎对SO非常理论化,没有真正的答案。 – asteri
@Jeff一个实际的原因,我有一个超类的同步方法,然后忘了让同一个方法在子类中同步。这当然是一个非常糟糕的(一如既往)我的设计,但后来我觉得有多奇怪,我认为我们不能忽略任何其他关键字,如果我们覆盖方法 –