【问题标题】:Producer Consumer issue in JavaJava中的生产者消费者问题
【发布时间】:2013-10-17 14:33:22
【问题描述】:
public class SomeAdaptor implements SomeListener {

    public ConcurrentHashMap<String, Double> pendingRFQ; 

    @Override
    public void run() {
       pendingRFQ.put(response.getId(), price);
    } //first run method

    @Override
    public void run() {
         Double price = pendingRFQ.get(quoteEvent.getId());
         if (price != null)
            System.out.println("ORDER TO Market.....");
    } //2nd run method

我遇到了一些线程问题。 pendingRFQ 地图不是最新的,当我尝试在第二个 run() 方法中提取价格时。我可以在第二种run() 方法中执行哪些技术来确保我正在查找的值存在?或者我怎样才能让它等到它进来?

【问题讨论】:

  • 在同一个类中不能有两个具有相同名称和签名的方法。也就是说,你不能在同一个类中有两个运行方法。你也错过了很多}
  • 生产者/消费者通常让消费者线程等待/阻塞,直到有可用的东西。当生产者产生某些东西时,它可以通知等待/阻塞的消费者线程某些东西可用。
  • 您有一个带有公共字段的公共类。我猜你是并发编程的新手。

标签: java multithreading asynchronous


【解决方案1】:

Map 替换为BlockingQueue,并在第二个线程中使用poll() 等待输入。

【讨论】:

  • +1 ArrayBlockingQueue 是一个很好的 impl 使用。如果您需要地图来做其他事情,那么只需添加线程通信队列即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
相关资源
最近更新 更多