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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周刚 中级黑马   /  2012-7-9 19:17  /  1326 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     开始学习进程同步的时候知道了是通过synchronized来对代码块或对函数进行同步,同时设定一个对象为锁,当 然jdk1.5里面出来了一个lock类,更强大,可以显示地调用锁。而且一个对象可以有多把锁。很爽!
   后来,出现了wait和notify,也有锁。我就有点晕了。进程同步和进程通信有什么区别吗?不都是锁吗?不都是让进程不能同时执行代码吗?
   再后来,慢慢理解了。我用多个生产者和多个消息者的例子来总结线程同步与线程通信的区别:
生产者线程A、B,消费者线程M、N。规定A、B都可以生产产品,并且可以修改产品个数num,他们俩不分先后,不受任何条件的限制,只要不是同时修改产品个数就行。A和B是纯粹的进程同步;而A和M生产者和消费者,除了要遵守线程同步的条件外,还得遵守另外一个条件,就是产品个数为0是不能再消费。所以产品数为0时消费者进程要停下来,等待生产者生产。当产品数不为0时,就得通知消息者有产品了,可以消费了。这个过程A与M就是通信了!
   进程通信比进程同步要求更高!进行通信的两个进程通常做的事情会不一样,而纯粹进行进程同步的两个进程通常是做同一种事情的。

   

2 个回复

倒序浏览
不知道楼主有没有学过操作系统,按照操作系统中的理论,A和B之间的关系是间接制约,为互斥;A和M之间的关系是直接制约,为同步;不知道跟楼主讲的是不是一个意思
回复 使用道具 举报
刘笑 发表于 2012-7-9 22:49
不知道楼主有没有学过操作系统,按照操作系统中的理论,A和B之间的关系是间接制约,为互斥;A和M之间的关系 ...

学过操作系统,笑笑兄说得很对!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马