gpt4 book ai didi

java - 尝试使用 JedisPool 中的链接资源

转载 作者:行者123 更新时间:2023-11-30 06:36:14 25 4
gpt4 key购买 nike

我很困惑:用法:try(Pipeline pipeline = jedisPool.getResource().pipelined())它会关闭管道和jedis实例吗?或者只是关闭管道?

我在多线程中使用它,并且收到如下错误。我很困惑,该错误是由 JedisPool 中的实例耗尽引起的(由于使用了 try-with-resource)还是因为死锁(因为 JedisPool 在多线程中表现不佳)?

sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:583)
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:442)
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
redis.clients.util.Pool.getResource(Pool.java:49)
redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
io.codis.jodis.RoundRobinJedisPool.getResource(RoundRobinJedisPool.java:214)

最佳答案

Try-with-resources 仅关闭变量,在您的情况下Pipeline pipeline。您可以在文档 https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 中阅读更多内容

您可以通过示例检查:

MyResource 类:

class MyResource implements AutoCloseable {

public SubResource getSubResource() {
return new SubResource();
}

@Override
public void close() throws Exception {
System.out.println("Resource closed");
}
}

子资源类:

class SubResource implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("SubResource closed");
}
}

类:

class Main {

public static void main(String[] args) {
try (SubResource s = new MyResource().getSubResource()) {
System.out.println("Before closing");
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("After closing");
}
}

执行结果:

Before closing
SubResource closed
After closing

关于java - 尝试使用 JedisPool 中的链接资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45166674/

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