但我想知道编程语言层面的主要区别。C似乎提供了更多的同步选择,如互斥锁、读写锁、记录锁、Posix信号量。
但在Java中,我知道我们可以使用synchronized来作为互斥锁?还有其他高级API,如AtomicXX和volatile。但我没有找到类似记录锁和读写锁的东西。这是Java语言的弱点吗?还是为了跨平台而做出的牺牲?
此外,我想知道这是否是像Nginx这样的Web服务器和Oracle这样的数据库都使用C/C++编写的主要原因?
我实际上是一名Java开发人员,非常好奇。 希望有人能给我一些建议。
编辑: Paul和Jesper已经建议,在JDK1.5之后,Java支持所有类似于C/C++的锁类。但如果可能的话,我仍然希望有人能更详细地解释为什么Java提供了足够的支持,我们仍然找不到一个纯Java的“Oracle”。
另外,我想添加一些有趣的东西,我从Nasir Khan的developer.com上学到了一些东西。 理解Java多线程和读写锁。
- 共享主内存与线程本地内存的交互方式,
- 相对于这种交互和互斥排除,"同步"的含义,
- 澄清对象锁和它所保护资源的区别。
编辑:
来自FileLock JavaDocs的内容:
文件锁是代表整个Java虚拟机持有的。它们不适合用于控制在同一虚拟机中由多个线程访问文件。
Java中的文件锁与C/C++中的完全相同。
更新
我发现另一个有趣的比较领域
在C ++中,有一些东西像
atomic<int> x, y;
在JAVA中我们也有AtomicInteger
。
它们是同一件事吗?