温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java并发编程重要概念是什么

发布时间:2022-01-14 10:49:53 来源:亿速云 阅读:117 作者:iii 栏目:大数据

本篇内容介绍了“java并发编程重要概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

并发 VS 并行

多线程编程,一般又会称为并发编程。而与如同孪生兄弟一般的一个概念,叫并行。

所谓并发,是在多核之前就已经存在的概念,多个线程通过交替执行来实现任务的执行。
而并行,更多的是指多核的基础上,多个线程同时执行。
就像我们去WC,此时马桶只有一个,正常的每次只有一个人在使用,这就是单线程执行。
如果有两个或多个人在等待,占有马桶的人便秘,为了短作业优先的原则,换下一个使用,这种每人使用一会儿是多线程并发执行。

如果马桶数大于等待人数,人们可以直接使用, 同时进行,这种则是多线程并行执行。

刷墙

假设当前要为一个房子刷颜料,而房子内房间比较多。
一开始的时候,工人A一个人在干活,每天从早忙到晚,进度缓慢。 (单线程执行)

为了提升效率,工人A又找了一个帮手,我们称之为工人B。(多线程)
两个人里,A更擅长涂料的调配,而B更擅长墙面的粉刷。两个人分工合作。在A调好涂料好,B开始粉刷
A把配好的涂料放到桶里,B拿到桶,进行粉刷工作。
整个配料包含最主要的三个步骤:

  • 加水

  • 增加涂料

  • 搅拌

有一天,B心里有事,心不在焉的。A刚把水倒到桶里,B就拿走桶使用它开始粉刷,做了不少无用功(由于不正确的执行顺序导致的结果的情况,称为竞态条件)。

A发现自己桶里的东西,可能会在没配好的时候,被B使用到(非原子操作)。为此,A搬到了一个小房间中,每次一桶涂料配好之后,才会放到涂料区,B从这里拿到配好的料去进行粉刷。

在A配料期间,桶都被A占用,B不再会像之前一样,使用到调配了一半的料。(我们把A的一次配料工作称为一次原子操作。同时认为A的操作Happens-before B的操作)

A与B对桶的使用,两人里,每次只能一人在使用。我们称这种操作是互斥的,。

这种通过桶占有的方式来实现的锁定,我们称为隐式锁。Java里称为Monitor锁管程锁
而为了保证在小房间内不被其他人打扰到,A每次配料期间,会在门上写上工作中,请稍后,这样别人看到后就不会再进入房间打断,这种形式的锁定,我们称为显式锁

假设A与B的涂料交付是在公共区域的涂料区进行,那么,每次A在小房间内配好的料,对于B来说,并不知晓。只有A把料放到公共区域内,B才能使用到。(这就是多线程中常提到的内存可见性)

再假设A放到公共区域的料,B有一段时间没取走,被不知情的人带走了。而之后不久,A又一次提供料到公共区域,此时B来取料,对于B来说,并不了解之前一次A曾提供过料。(这是并发中常提到的ABA问题)

“java并发编程重要概念是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI