gpt4 book ai didi

java - 服务器访问两种不同类型的线程

转载 作者:行者123 更新时间:2023-11-30 07:44:46 26 4
gpt4 key购买 nike

我有一个消息服务器,有两种不同类型的线程,一个从客户端读取,另一个在另一个客户端写入(取决于接收者)...(是的,必须是这样,我不能在同一个线程中进行读/写...)

我基本上需要将所有消息存储在 ArrayList(Server ?) 中的某个位置,保留它们直到另一个客户端连接到服务器。

我的问题是:

I can easily read the object from the Thread, however i can't see any way to extract the object to a shared ArrayList in order to get acess to him in the other thread.

--->Input Thread ---> ArrayList ---> OutputThread   

最佳答案

听起来你真正需要的是一个线程安全的队列,而不一定是一个ArrayList。 BlockingQueue接口(interface)是专门为此类事情而设计的。您的输入线程可以将消息放入队列中,输出线程可以将它们删除。如果当输出线程尝试从中获取消息时队列为空,它将自动等待输入线程添加消息。

有许多类实现 BlockingQueue 接口(interface),但您可能需要使用这两个类之一:

  • ArrayBlockingQueue基于固定大小的数组,因此在构造数组时必须选择一个大小,这就是队列中可以容纳的项目数的限制。如果当输入线程尝试将消息放入队列时队列已满,输入线程将等待输出线程删除队列中已有的消息之一。
  • LinkedBlockingQueue不需要大小限制;您可以拥有一个永远不会“满”的队列,因此输入线程可以继续将越来越多的消息放入其中,即使输出线程删除消息的速度不够快以跟上。 (排队太多消息最终可能会导致 OutOfMemoryError。)

关于java - 服务器访问两种不同类型的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34080998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com