学完多线程技术,并了解了线程和CPU的运行原理。可以利用等待唤醒机制来控制线程得到或放弃CPU执行权。那么,不借助等待唤醒机制,我们是否也能实现对多线程的控制,达到相同效果呢?可能你会认为这是痴人说梦。但仔细看完下面的程序,希望能对多线程有更深的了解。重点说明:
多线程对同一资源操作的问题中,有两点是至关重要的:
1)CPU工作原理:CPU是以极高的频率在多个线程之间做着快速的切换,并不是长时间只执行一个线程。
2)定义资源标记:这里说的“资源标记”就是boolean型变量,它的变化记录着该由哪些线程执行操作,哪些线程不该执行操作。
该例中涉及到两个“资源标记”:flag和mark。flag用于记录该对资源进行生产操作还是消费操作的情况。mark用于记录该生产哪种类型的产品(“张三”或“rose ”)。
只要定义好这两个“标记”,即使不借助等待唤醒机制,也可以实现多个生产者和多个消费者对同一资源进行操作的效果。
当然,这个程序的执行效率要低于加入等待唤醒机制的程序。因为正常程序中,线程遇到wait()会释放执行资格。该程序中却不存在释放执行资格的情况,而是借助CPU的快速切换实现效果。
该例目的在于使大家明白,实现多线程对同一资源进行操作时,并不是必须要利用等待唤醒机制,只是一般程序都要提高效率,故等待唤醒这种机制会使用地比较普遍。
附执行效果图。期待交流。 |
|