java - Java中多线程服务器的最佳线程安全队列类型是什么
问题描述
我正在用 Java 编写服务器,正如标题所暗示的那样,它应该能够同时处理多个客户端。在内部,服务器可以分为一个处理内部系统的“主”线程和多个负责与特定客户端通信的“工作”线程。
我计划实现它的方式是给每个线程它自己的任务队列。给定线程只能从该队列中删除任务(出队),其他线程将负责将任务添加到该队列中。主线程与工作线程看起来有点不同——特别是,在主线程的情况下,所有其他线程都能够将任务添加到它的队列中;对于工作线程,只有主线程可以添加任务供他们处理(其他工作人员不能,但考虑到我正在解决的问题,无论如何都不需要)。因此,情况看起来像这样——对于工作线程,一个线程将添加任务(主线程),一个线程将删除并执行它们(工作线程);对于主线程,多个线程将添加任务(工作者),而一个人将删除并执行它们(主要)。一次连接的客户端可能不再有约 50-100 个。
我的问题是,我应该使用什么类型的队列来为主线程和工作线程存储这些任务?我应该使用简单的互斥锁标准库容器java.util.LinkedList
,如线程安全实现java.util.concurrent.ConcurrentLinkedDeque
,还是其他?
显然,主线程和工作线程可以使用不同的队列类型。不过,所有工人都应该使用相同的类型。我还希望将其他决定留在本讨论范围之外(例如使用多个线程而不是执行程序等)
解决方案
推荐阅读
- python - 将python下载到macbook
- angular - 角度视频:不允许加载本地资源:file:///E:/Videoes/pakistan.mp4
- visual-studio-code - VSCode 中的动态语法高亮
- amazon-s3 - 尝试检查嵌套异步中是否存在 s3 存储桶项
- html - 如何在 Webview swift 4 中显示来自 HTML URL 的图像
- reactjs - “窗口”类型上不存在属性“RocketChat”
- python - 子进程调用以使用变量动态转义 Powershell 脚本
- node.js - 如何使用请求将 FormData 从 Node/Express 发送到另一个应用程序(Node/Express)
- php - php: onClick 事件 - 表
- javascript - 调整画布大小而不放大元素 WEBGL