首页 > 解决方案 > Java中多线程服务器的最佳线程安全队列类型是什么

问题描述

我正在用 Java 编写服务器,正如标题所暗示的那样,它应该能够同时处理多个客户端。在内部,服务器可以分为一个处理内部系统的“主”线程和多个负责与特定客户端通信的“工作”线程。

我计划实现它的方式是给每个线程它自己的任务队列。给定线程只能从该队列中删除任务(出队),其他线程将负责将任务添加到该队列中。主线程与工作线程看起来有点不同——特别是,在主线程的情况下,所有其他线程都能够将任务添加到它的队列中;对于工作线程,只有主线程可以添加任务供他们处理(其他工作人员不能,但考虑到我正在解决的问题,无论如何都不需要)。因此,情况看起来像这样——对于工作线程,一个线程将添加任务(主线程),一个线程将删除并执行它们(工作线程);对于主线程,多个线程将添加任务(工作者),而一个人将删除并执行它们(主要)。一次连接的客户端可能不再有约 50-100 个。

我的问题是,我应该使用什么类型的队列来为主线程和工作线程存储这些任务?我应该使用简单的互斥锁标准库容器java.util.LinkedList,如线程安全实现java.util.concurrent.ConcurrentLinkedDeque,还是其他?

显然,主线程和工作线程可以使用不同的队列类型。不过,所有工人都应该使用相同的类型。我还希望将其他决定留在本讨论范围之外(例如使用多个线程而不是执行程序等)

标签: javamultithreadingconcurrencyqueue

解决方案


推荐阅读