30-结果分析
结果分析
消费者线程启动时,数据缓冲区为空,调用 exchanger()
进行同步,等待生产者提供消费者所需的数据。生产者线程启动时,数据缓冲区同样为空,将其产生的10个字符串存储到缓冲区后,通过调用 exchanger()
方法进行同步。
此时,由于两个线程(生产者和消费者)均在 Exchanger
当中,该对象将交换双方的数据结构,因此,当消费者从调用的 exchange()
方法返回时,其缓冲区中已经有10个字符串。而生产者从调用的 exchange()
方法返回时,其缓冲区已经为空需要再次生产。这个同步交换过程将重复10次。
运行本案例,可以看到生产者和消费者是如何并发执行和同步交换缓冲区的。与其他同步工具类一样,第一个调用 exchange()
方法的线程将会休眠,直到该方法由另一个线程调用。