我实现了一个使用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
循环执行一次之后,由于main
在countryCities
的{{1}}中没有得到更新的LinkedBlockingQueue
而中断了main
方法。由于该线程独立工作,因此run
方法仅在主线程死后的 first 迭代中被调用。
这不是我所期望的行为。我期望countryCities
中的main
被一些“城市”更新。
有什么办法可以让main
中的队列等待GetStatus.GetMoreInfo()
的结果吗?
我知道在实现多线程时,我可能在这里做错了什么。但是请原谅我,因为这是我第一次实现它:)