java与并发

并发机制是一种常用的提升计算机运算效率的一种机制,这种机制针对的问题,可能看了很多遍书的人都没有想过。这个问题是: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%满足同步要求,外围的锁定会直接消除掉等等。这些都是围绕在底层的数据层操作的。同时还有偏向锁机制、自旋锁等机制。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值