Java和C/C++之间MultiThread方面的差异

Cla*_*Bao 8 c c++ java multithreading

我已经阅读了一些提示,多线程实现在很大程度上取决于您正在使用的目标操作系统.操作系统最终提供多线程功能.如Linux有POSIX标准实现和windows32有其他方式.

但我想知道编程语言水平的主要差异.C似乎为同步提供了更多选择,例如Mutex,读写锁,记录锁定,Posix信号量.

但在Java中,我知道我们可以使用像Mutex这样的同步作品吗?还有一些其他高级API,比如AtomicXX和volatile.但我没有找到像记录锁定和读写锁的东西.它是Java语言的弱点吗?或者是跨平台的牺牲?

另外我想知道这是一个主要原因,像nginx这样的web服务器和像oracle这样的数据库都是用C/C++编写的吗?

我实际上是一名Java开发人员,我对它非常好奇.希望有人可以给我一些建议.

编辑:

Paul和Jesper已经建议Java在JDK1.5之后支持所有类似的锁类,如C/C++.但是如果可能的话,我仍然希望有人可以解释为什么Java提供足够支持的更多细节,我们仍然找不到纯Java"oracle".

编辑:

另外,我想添加一些有趣的东西,我是从Nas.com Khan的developer.com上学到的. 了解Java多线程和读写锁.

其中有一些话题.

  • 共享主内存与线程本地内存的交互,
  • 关于这种互动和互斥的"同步"的含义.
  • 澄清对象锁的区别以及它所保护的资源.

编辑:

来自FileLock JavaDocs

文件锁代表整个Java虚拟机.它们不适合控制同一虚拟机中多个线程对文件的访问.

Java中的文件锁与C/C++中的文件锁完全相同.

更新
我找到了另一个有趣的区域,比较
在C++中,有一些类似的东西

atomic<int> x, y;
Run Code Online (Sandbox Code Playgroud)


在JAVA我们也有AtomicInteger.它们是一样的吗?

jmo*_*ora 5

在大多数方面,Java的级别略高于C / C ++,这主要是由于JVM提供的抽象。因此,它的效率较低,并且与OS距离较远。

同步方法就是一个例子,实现可以根据底层OS使用不同的机制。

如您所提到的,由于效率较低,因此C / C ++在某些效率非常重要的任务中是首选。

我认为(由于JVM和更高级别而引起的抽象)是C / C ++与Java之间差异的主要原因和源,它是如何处理线程以及其他差异只是该主要差异的方面或后果。

专门针对读写锁,Java提供了使用它们的工具(如先前的注释所述),并且很可能您想要使用的任何同步方法都可以在Java中以某种方式使用或实现。JVM如何将其转换为OS调用,并且结果的效率是另一回事。


Pau*_*ger 4

Java 确实提供了读写锁 - http://download.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReadWriteLock.html

如果您还没有看过 java.util.concurrent 包,请查看一下。我怀疑 Java 的支持与 C 的支持相当。还有许多用 Java 编写的 Web 服务器使用多线程或异步 IO (NIO)。