博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java与并发
阅读量:4040 次
发布时间:2019-05-24

本文共 979 字,大约阅读时间需要 3 分钟。

并发机制是一种常用的提升计算机运算效率的一种机制,这种机制针对的问题,可能看了很多遍书的人都没有想过。这个问题是:CPU的运算速度要超过内存存取的速度很多,内存存取的速度要超过外部I/O的速度很多。于是为了提高CPU的有效利用率,人们想到了一种办法,就是让CPU同时同时执行多项任务,CPU进行分时工作,这样就引申出了并发的概念。并发要解决的问题:任务的优先级、资源的分配,任务调度等一系列的问题。

由于java本身的并发是运行在JVM内的,它的一套并发机制必须完全可以映射到具体系统上的并发机制。这个映射有可能是映射到系统本身的系统使用的线程上,也有可能映射到系统扩展线程上。java的内存模型定义了8中与并发相关的操作:lock , unlock , read , load , use , assign , store , write。这8种原子性操作需要在并发时使用,可以满足要求。

这8种操作是指令级别的操作,映射到java具体代码中,

例如java的同步区域操作是; lock,  其他操作 , unlock

java中一些同步变量类型的读、写、赋值操作也是使用这8种操作组成。例如volatile和synchronized修饰的变量的赋值操作:

lock,load,assign,unlock。

这些原子操作之间会存在某种逻辑上的顺序特性,这些顺序也是为了保证同步的准确性。在顺序性机制中,java在基础线程机制上的join就是用来保证它的。

在我们java程序当中,可能会用到很多的同步块,同步方法等,为什么已经在同步机制上有了底层的规定,还要进行人为的同步保证?java底层的同步机制仅仅只是在单个操作上保证了同步,在实际应用当中的某些业务或者场景也是需要在更大的范围提供人为同步的机制。例如银行业务的转账操作,它是需要实行人为同步机制的,同时底层更离不开但不操作数据的同步。

实现同步机制虽然会保证数据的准确性,但是会降低系统的运行效率。虽然JVM本身会提供同步的优化机制,例如l同步范围合并,多个锁在合并之后保留最外围的锁;检测同步机制如果100%满足同步要求,外围的锁定会直接消除掉等等。这些都是围绕在底层的数据层操作的。同时还有偏向锁机制、自旋锁等机制。

同步在使用过程中需要慎重考虑,只有满足一定需要的情况下才用它,毕竟它是重武器。

转载地址:http://czvdi.baihongyu.com/

你可能感兴趣的文章
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
[LeetCode By MYSQL] Combine Two Tables
查看>>
[Leetcode BY python ]190. Reverse Bits
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
Phone双模修改涉及文件列表
查看>>
android UI小知识点
查看>>
Android之TelephonyManager类的方法详解
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>