并发:等到公共代码块完成

Concurrency: Wait until common block of code is done

我正在编写一个多线程服务器,需要处理客户端请求并在完成后 return 将它们返回给客户端。

我有一个并发客户端连接对象列表,它将有效负载传递到一个公共队列。通过队列后,负载由服务器处理并生成响应。

我的问题是我不知道如何通知客户端服务器已完成处理。

这是处理客户端负载的线程,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

}

评论部分是我遇到问题的地方。我不知道如何实现客户端线程将等待直到请求被处理的机制,一旦完成,我不知道如何将回复发送回客户端。

我花了很多时间研究,查看了 consumer/producer 问题,wait/notify 机制等,但似乎没有什么与这个特定问题相似。

如有任何帮助,我们将不胜感激。

您需要在 payloads 中的有效负载旁边存储客户端连接信息。

使用两个字段创建 class。其中一个将是您的有效载荷,另一个是允许您识别您的客户端的东西。

在您的 // SEND REPLY BACCK TO THE CLIENT 中发送回复。无需等待 /// Sleep until the server is done doing its logic with the payload

在不知道您与客户沟通的方式的情况下,我无法给您更好的答案。

如果您使用套接字 "something that allow you to identify your client" 将是套接字实例。

其他方法 将使用 SynchronousQueue

您在 // SEND REPLY BACCK TO THE CLIENT 中输入您的回复。

/// Sleep until the server is done doing its logic with the payload 中你接受响应(方法将阻塞直到响应被放入缓冲区)。

以与之前方法相同的方式传递带有有效负载的缓冲区。