如何等待LinkedBlockingQueue从线程获取结果?

时间:2018-11-18 23:56:34

标签: java multithreading executorservice

我实现了一个使用LinkedBlockingQueue来存储城市名称的类。这是示例代码:

Executors类用于生成线程。

主要方法

LinkedBlockingQueue<String> countryCities= new LinkedBlockingQueue<String>();
......
........//Some code that initially inserts into queue

ExecutorService exe = Executors.newFixedThreadPool(30);
while(!countryCities.isEmpty())
        {
                emp=countryCities.take().getValue();        
                GetStatus stat=new GetStatus (country);
                exe.execute(stat);

        }

        exe.shutdown();

在GetStatus类中

public class GetStatus implements Runnable
{

  LinkedBlockingQueue<String> countryCities;

  public GetStatus (LinkedBlockingQueue<String> countryCities)
  {
     this.countryCities=countryCities;
  }
@Override
    public void run() 
   {

            GetMoreInfo();

    }

public void GetMoreInfo()
   {
      String cities = ......
       ........ // Some processing to get cities
      countryCities.put(cities);
   }
}

问题是在while循环执行一次之后,由于maincountryCities的{​​{1}}中没有得到更新的LinkedBlockingQueue而中断了main方法。由于该线程独立工作,因此run方法仅在主线程死后的 first 迭代中被调用。

这不是我所期望的行为。我期望countryCities中的main被一些“城市”更新。

有什么办法可以让main中的队列等待GetStatus.GetMoreInfo()的结果吗?

我知道在实现多线程时,我可能在这里做错了什么。但是请原谅我,因为这是我第一次实现它:)

0 个答案:

没有答案