在无状态代理中同时运行两个线程并保证它们之间的通信

时间:2015-08-07 09:20:42

标签: java multithreading synchronization agent

我正在 Java 中开发无状态代理,该代理从一个服务器获取信息并将其传输到另一个客户端。这意味着代理位于客户端和服务器之间。所以我想在代理上运行两个线程同时:一个线程(thread1)运行serverSocket并从客户端获取请求,而另一个线程(thread2)运行并与服务器进行通信。问题在于两个线程之间的同步。我正在考虑让线程1全面询问线程2关于新信息的问题。如果线程2没有新内容,他就不会回答它。什么是它们之间同步的最佳方式。我应该使用全局变量(标志)来同步它们吗?我有无国籍代理人时可以保存信息吗?

1 个答案:

答案 0 :(得分:0)

我认为您应该将应用修改为异步模型

您的应用需要:
  - 接受传入连接的入口点 - >一个很好的例子是异步servlet(或一个专用线程)   - 一个ThreadPoolExecutor,提供固定数量的worker和一个阻塞队列(使用this构造函数)。

工作流程:

  1. 接受命令请求。
  2. 将传入请求包含到(Runnable)任务中。
  3. 将任务放入阻止队列。
  4. 如果ThreadPoolExecutor有免费工作人员开始处理任务
  5. 此类型号的优势是您可以使用一个线程处理一个请求。因此无需手动同步任何内容。