如何使用Java模拟阻塞函数

时间:2012-06-25 23:40:36

标签: java multithreading

我有两个主题。一个是客户,另一个是产品。

我想在客户中调用一个名为READ的函数。这应该无限期地阻止,直到生产者把数据放在上面。

我该怎么办? 谢谢!

3 个答案:

答案 0 :(得分:5)

我建议您使用LinkedBlockingQueue。这是模拟“生产者 - 消费”问题的最简单方法。一个线程使用put方法将值放入队列,另一个线程使用阻塞的take消耗数据(线程等待直到队列不为空)。使用LinkedBlockingQueue非常简单,因为您不必同步方法。一切都已经完成。

答案 1 :(得分:2)

如果要放入队列的数据需要同步,即生产者产生一个对象并将其存储在队列中;消费者必须消费生产者投入的对象,使用SynchronousQueue或新的TransferQueue应该是一个更好的主意

答案 2 :(得分:-3)

使用thread.wait(),然后thread.notify()thread.wait()等待thread.notify()发生。