【发布时间】:2016-10-28 17:48:31
【问题描述】:
我正在编写一个多线程服务器,需要处理客户端请求并在完成后将它们返回给客户端。
我有一个并发客户端连接对象列表,它将有效负载传递到一个公共队列。通过队列后,负载由服务器处理并生成响应。
我的问题是我不知道如何通知客户端服务器已完成处理。
这是处理客户端负载的线程,payLoad是一个BlockingQueue,之前是由客户端线程加载的:
Thread messageHandling = new Thread() {
public void run(){
while(true){
try{
Object payLoad= payLoads.take();
// Do some handling
// SEND REPLY BACCK TO THE CLIENT
}
catch(InterruptedException e){ }
}
}
};
同时,在客户端,发生了以下情况:
{
...
payloads.add(payLoad)
/// Sleep until the server is done doing its logic with the payload
}
评论位是我遇到麻烦的地方。我不知道如何实现一种机制,客户端线程将等待直到请求被处理,一旦处理完毕,我不知道如何将回复发送回客户端。
我花了很多时间研究,查看消费者/生产者问题,等待/通知机制等,但似乎没有什么与这个特定问题相似。
任何帮助将不胜感激。
【问题讨论】:
-
“但似乎没有什么与这个特定问题相似。” 据我了解,您在实例(服务器)上保留了作业并收集结果,而许多客户拉出可用的工作并需要报告结果,对吗?
-
没错
-
好的,那么您的“调度程序”对象中需要 2 个方法,
take()方法,您的代码已经有一个方法来返回结果,例如report(JobResult jr)。客户得到他们的工作,就像你已经拥有的一样。当他们完成时,他们报告他们的结果,并且“调度程序”对象必须将结果与作业匹配并执行它应该对结果执行的任何操作。
标签: java concurrency producer-consumer