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