当前位置: 首页 > 网络应用技术

对并发编程的深度理解的三个特征

时间:2023-03-09 12:44:35 网络应用技术

  在采访中,经常问面试官。请讨论并发编程的三个主要特征。我必须承认,我毕业时被问到的可能性是50%。西里回答了百度的简单答案。说他不想说的话。我期待着,以为他终于在我的梦中等着他。在这里撰写一个故事。没有多大的胡说八道,直接匆忙。

  现在您要锁定,您必须首先讨论并发编程的三个主要功能。互联网上也有许多解释,但是许多解释非常苍白,难以理解这三个主要特征。当然,有很多好的博客解释得很好。

  在解释原子性时,许多博客将解释不间断,成功或全部失败。这是互联网的大部分解释。由于提到它没有分割。流图表要理解

  上图是根据我自己的理解来解释的。如果您很难理解,则可以参考以下官方说明

  可见性还必须从Java内存模型(JMM)开始,而放屁并不是要解释上面的图片

  从Java内存模型可以看出,在多线程并发操作中操作相同的变量是不安全的。为什么不安全?看图片

  仍然不要说太多或那个句子 -

  通过添加记忆障碍和禁止重型排序优化可见挥发性,但应注意的是,挥发性可以确保挥发性变量的可见性,但不能保证挥发性变量复合操作的原子性。

  在编写挥发性关键字修改变量时,在编写操作后添加存储屏障指令以刷新本地内存中的共享变量为主内存;负载屏障指令从主内存中读取共享变量;简而言之,挥发性变量被迫从主内存中重新阅读变量的值,每次线程访问该变量,并且当变量更改时,并且再次迫使线程迫使线程刷新最新值以这种方式,对主要内存。不同的线程可以始终看到变量的最新值。

  我没有说太多胡说八道,还是上面的图片

  在Java内存模型中,允许编译器和处理器对指令进行排序,但是重型排序过程不会影响单个线程程序的执行,但是它将影响多线程并发执行的正确性。

  在Java中,您可以通过挥发性关键字确保某些“订单”。此外,可以通过同步和锁定来确保订单。显然,同步和锁定确保每次都有线程执行同步代码,这等同于允许线程订单执行同步代码,这自然可以保证订单。