黑马程序员技术交流社区

标题: 关于同步和并发执行 [打印本页]

作者: 萧萧北    时间: 2013-6-8 11:59
标题: 关于同步和并发执行
本帖最后由 萧萧北 于 2013-6-9 08:46 编辑

关于线程同步和并发执行的理解?
我看视频学到集合部分,不同的集合类型有的是线程同步,有的不同步,还有并发执行...
在前面多线程就学过同步,到集合部分又感觉理解的不是很清晰?麻烦各位高手给我讲讲这两个点:

先谢谢啦!

作者: 张歆明    时间: 2013-6-8 12:27
多线程的目的就是出现多个线程  一起执行  这种行为叫并发(并行出发的意思)
并发是好的初衷 但是  由于并发会使得并发中运行的多个线程出现访问同一个共享资源的情况
这样如果不采取措施 就会出现数据存取错误的情况
没有办法的情况下:出现了同步的概念   你可以这么理解
本来大家一起并行执行(理想结果)
但是:遇见共享数据之后   不能一起啦 (并发不行)  只能一个一个地执行(锁机制)  这样并行变成了串行  也就是同步机制

集合中的数据如果看成是共享资源的话:
线程访问到这个集合中的数据的话,如果集合内部的代码(java的源代码)有同步的机制, 则多个线程过来的时候,就要看一下锁是不是可用才能访问。
本来是并发执行的线程见到锁(同步)就不得不一个一个执行  显然  效率低了 但是  数据不会出错

有的集合源代码没有设置线程的同步机制 那么  多线程来的时候  就会随意的访问数据 而不用判断锁的情况(因为人家集合的源代码没有设置这个同步机制)
这样并发速度很快   但是 数据也不安全了

所以  毕老师说了  为了效率 最好用非同步机制的  在调用这个集合(看成共享资源)的代码由程序员自行加上锁  对线程进行同步管理

所以  访问数据的速度和访问数据的正确性是一对矛盾的问题   只能折中 不能都要 这样  你的代码里面  有的地方有同步 有的地方没有  没有的地方  就并发了
有的地方  就要一个一个地执行  好像行驶在宽阔的大马路上的五辆并行的轿车突然遇见一个只能允许一次只能通过一辆轿车的窄桥一样  
肩并肩行驶的轿车只能按顺序通过窄桥
作者: 萧萧北    时间: 2013-6-9 08:43
张歆明 发表于 2013-6-8 12:27
多线程的目的就是出现多个线程  一起执行  这种行为叫并发(并行出发的意思)
并发是好的初衷 但是  由于并 ...

讲的很详细啦,简单明了,通俗易懂,不错哦。谢谢啦
作者: 金辉    时间: 2013-6-9 08:48
楼上写的很详细,帮顶
作者: 张歆明    时间: 2013-6-9 08:52
萧萧北 发表于 2013-6-9 08:43
讲的很详细啦,简单明了,通俗易懂,不错哦。谢谢啦

哈哈 不客气哈
作者: ⋛⋌⋚JEEP    时间: 2014-7-14 23:43
楼上说的很详细,果断过来巩固一下:)
作者: 张周飞    时间: 2014-7-15 10:10
楼主的问题很好,也同时解决了我还不懂的问题
沙发 回复的 好详细了 ,受益匪浅,果断收藏起来。。。
作者: a191170796    时间: 2014-7-16 11:11
通俗易懂!!!赞一个!!
作者: 钟翠翠    时间: 2014-7-17 08:55
一楼总结的非常详细,果断收藏了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2