我正在阅读Book Java Concurrency in Practice.在第15章中,他们讨论的是非阻塞算法和比较交换(CAS)方法.
据说CAS比锁定方法表现更好.我想问那些已经使用过这两个概念的人,并希望听到你何时更喜欢这些概念中的哪一个?它真的快得多吗?
对我来说,锁的使用更清晰,更容易理解,甚至可能更好维护(如果我错了,请纠正我).我们是否应该专注于创建与CAS相关的并发代码而不是锁定以获得更好的性能提升或者可持续性更重要?
我知道在使用什么时可能没有严格的规定.但我只是想听听CAS新概念的一些看法和经验.
你什么时候不想使用函数式编程?什么不太擅长?
我更多地寻找范式的缺点,而不是"没有广泛使用"或"没有好的调试器可用"之类的东西.到目前为止,这些答案可能是正确的,但它们处理FP是一个新概念(一个不可避免的问题)而不是任何固有的品质.
有关:
scala如何使编写多线程程序比在java中更容易?scala能做些什么(java不能)来利用多个处理器?
java multithreading language-features programming-languages scala
我已经阅读了一些提示,多线程实现在很大程度上取决于您正在使用的目标操作系统.操作系统最终提供多线程功能.如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.它们是一样的吗?