gpt4 book ai didi

java - 如何检查 ArrayBlockingQueue 是否被锁定或队列元素当前由线程处理?

转载 作者:行者123 更新时间:2023-12-02 08:17:22 27 4
gpt4 key购买 nike

您好,我很好奇是否有办法检查 ArrayBlockingQuery 查询当前是否被锁定?原因:我有一个服务器,它监听套接字,接收参数,处理它们,然后将一些结果返回给客户端。该服务器(假设是服务器 A)在处理参数时与其他服务器(服务器 B)打开 session ,然后将信息发送到 B。连接到 B 时只能创建一个 session ,但 A 可以接受多个客户端连接。因为ArrayBlockingQueue用于存储参数,并且其他一些线程运行该队列并将它们一一发送到B。

我需要执行该功能 - 当 ArrayBlockingQueue 为空且当前未处理任何内容并且客户端数据发送到 A 然后立即处理 - 将数据发送到 B 服务器,处理来自 B 的响应,然后如果 ArrayBlockingQuery 将响应返回给客户端不为空并且已处理某些内容,然后只需将参数添加到队列并将其他响应从 A 发送到客户端。这就是为什么我需要知道是否有办法检查 ArrayBlockingQueue 是否被锁定或队列元素当前是否由线程处理。

谢谢!

最佳答案

有什么理由不只使用锁,因为它是为了保护一次只能在一个线程中使用的资源而设计的。

// in a client connection thread
lock.lock();
try {
// use connection to server B
} finally {
lock.unlock();
}

这可确保服务器 B 一次仅在一个线程中使用,并且您无需向队列中添加任何内容。

<小时/>

不确定什么是ArrayBlockingQuery,谷歌也不知道。您的意思是 ArrayBlockingQueue 吗?

ArrayBlockingQueue 不会锁定很长时间,因此此信息不是很有用。但是您可以通过反射获取锁。

您似乎过度考虑了您的解决方案。

您希望确保服务器 B 一次仅获得一个连接,并且您正在使用队列来执行此操作,但是您希望绕过此操作,但这意味着放弃一次一个连接的原则.

关于java - 如何检查 ArrayBlockingQueue 是否被锁定或队列元素当前由线程处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094448/

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