如果理解java中的同步

java的同步说白了就是要保证运行程序的顺序一致性

顺序一致性:顺序一致性模型是被计算机科学家理想化的理论参考模型,为程序员提供了极强的内存可见性保证,两大特性:

  •     一个线程中的所有操作必须按照程序的顺序来执行
  • 不管程序是否同步,所有的线程都只能看到一个单一的操作执行顺序,在顺序一致性内存模型中,每个操作必须是原子执行并且立即对所有的线程可见。   

但是JMM本身没有对多线程下的执行顺序做一致性的保证,在顺序一致性模型中,所有操作完全按照程序顺序串行执行,在JMM中,临界区的代码可以重新排序,单会在临界区的时间点做一些特殊处理,保证虽然在临界区内做了重排序,但是由于监视器的互斥特性,B无法观察到A的重排序,既提高了执行效率,有没有改变执行的结果。

   但是如果没有执行同步操作,JMM不保证执行结果跟顺序一致性模型的结果一样,因为这样的话,就需要禁用大量的处理器和编译器的优化,对执行的性能会产生很大的影响。未同步的程序在顺序一致性模型中,整体是无序的。结果无法预知,保证未同步程序的两个模型的执行结果没什么意义。

如何理解上边这段话呢,我的看法是这样,顺序一致性模型的是理想的模型,但是现实很骨感,如果要做大这种模型,就对于处理器的优化和编译器的优化造成很大的影响,但是如果单单是为了同步这个事儿,把这些优化都给取消掉了的话,得不偿失。这也可以理解成为什么java语言再设计的时候干嘛不直接把这些需要考虑的同步问题都给屏蔽了呢,直接让语言来保证这个,就是因为这涉及到大量的处理器的的指令优化的损失。

    java的同步机制呢,就是设法,在专门对于临界操作的时候呢做一些处理,保证他看着跟顺序一致性水样的但是还不影响大执行的优化,编译器的优化。

 

 

 

 

 

转载于:https://my.oschina.net/u/1246109/blog/802917

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值