当使用线程来同时运行多个任务时,可以使用锁(互斥)来同步两个任务的行为,从而使得一个任务不会干扰另一个任务,也就是说两个任务在交替的使用某个共享资源,使用互斥可以保证时刻只有一个任务可以访问这项资源。
解决了多线程引起的资源竞争问题,那么我们又该如何实现线程间的彼此协作?使得多个任务可以一起去解决某个问题,也就是说,现在的问题不是线程间的干涉,而是线程间如何协调,因为在这类问题中,某些部分必须在其他部分被解决之前解决。
一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。前者是生产者,后者就是消费者,这种模式隔离了“做什么”(what)和“怎么做”(How),在功能层面上实现了解耦,体系结构上具备了良好的伸缩性,在Java语言中实现的简单的办法是让消费者线程不断地循环检查变量是否符合预期,如下面代码所示,在 while循环中设置不满足的条件,如果条件满足则退出while循环,从而完成消费者的工作。
>>>阅读全文