当前位置:嗨网首页>书籍在线阅读

30-结果分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

结果分析

消费者线程启动时,数据缓冲区为空,调用 exchanger() 进行同步,等待生产者提供消费者所需的数据。生产者线程启动时,数据缓冲区同样为空,将其产生的10个字符串存储到缓冲区后,通过调用 exchanger() 方法进行同步。

此时,由于两个线程(生产者和消费者)均在 Exchanger 当中,该对象将交换双方的数据结构,因此,当消费者从调用的 exchange() 方法返回时,其缓冲区中已经有10个字符串。而生产者从调用的 exchange() 方法返回时,其缓冲区已经为空需要再次生产。这个同步交换过程将重复10次。

运行本案例,可以看到生产者和消费者是如何并发执行和同步交换缓冲区的。与其他同步工具类一样,第一个调用 exchange() 方法的线程将会休眠,直到该方法由另一个线程调用。