A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高境 金牌黑马   /  2013-1-10 14:50  /  1169 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 12:21 编辑

很多的地方说java中互斥访问是无序的,同步是在互斥的基础上变成有序的,既然互斥是无序的为什么还通过synchronized实现,synchronized一实现不是就变成有序的了,这跟同步的实现不是一样了!不懂!

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
是呀,下面是一篇小文章,你可以参考一下。
相交进程之间的关系主要有两种,同步与互斥。所谓互斥,是指散步在不同进程之间的若干程序片断,
当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程
运行完这个程序片段后才可以运行。所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行
必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。
显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。
  也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,
另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!  
总结:互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制
访问者对资源的访问顺序,即访问是无序的。  同步:是指在互斥的基础上(大多数情况),通过其它
机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况
必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
你结合线程通讯再想想看,举两个简单的例子吧。
第一个是售票的例子,多个窗口售票互斥的,并且无序,这个应该好理解吧!
第二个例子是生产与销售的例子,生产线程与销售线程是互斥的吧(因为不可能同时对同一个物品进行操作),但是他们同时对一个物品的操作时有序的(先生产后销售)。此时生产线程和销售线程互斥但是有序。

不知道这样理解对不对!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马