Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程在使用JNDI库执行DNS查询时挂起_Java_Multithreading_Dns_Java 7_Jdk1.7 - Fatal编程技术网

Java 线程在使用JNDI库执行DNS查询时挂起

Java 线程在使用JNDI库执行DNS查询时挂起,java,multithreading,dns,java-7,jdk1.7,Java,Multithreading,Dns,Java 7,Jdk1.7,下面是从DNS获取TXT记录时线程被锁定导致的死锁 java.lang.Thread.State: RUNNABLE at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:272) at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.jav

下面是从DNS获取TXT记录时线程被锁定导致的死锁

java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(FileInputStream.java:272)
    at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:202)
    at sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:264)
    at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:278)
    - locked <0x00000004f3cd17b0> (a java.lang.Object)
    at sun.security.provider.NativePRNG$RandomIO.access$200(NativePRNG.java:125)
    at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:114)
    at java.security.SecureRandom.nextBytes(SecureRandom.java:466)
    - locked <0x00000004f111d290> (a java.security.SecureRandom)
    at java.security.SecureRandom.next(SecureRandom.java:488)
    at java.util.Random.nextInt(Random.java:303)
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:175)
    at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:430)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:231)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:139)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:127)
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
java.lang.Thread.State:可运行
位于java.io.FileInputStream.readBytes(本机方法)
在java.io.FileInputStream.read(FileInputStream.java:272)处
位于sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:202)
在sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:264)上
位于sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:278)
-锁定(一个java.lang.Object)
位于sun.security.provider.NativePRNG$RandomIO.access$200(NativePRNG.java:125)
位于sun.security.provider.NativePRNG.enginextbytes(NativePRNG.java:114)
位于java.security.SecureRandom.nextBytes(SecureRandom.java:466)
-锁定(一个java.security.SecureRandom)
下一步(SecureRandom.java:488)
位于java.util.Random.nextInt(Random.java:303)
位于com.sun.jndi.dns.DnsClient.query(DnsClient.java:175)
位于com.sun.jndi.dns.Resolver.query(Resolver.java:81)
位于com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:430)
位于com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:231)
位于com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:139)
位于com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:127)
位于javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
通过分析,我发现这个线程锁是由于执行java.security.SecureRandom.next的速度缓慢造成的

下面是针对遇到的类似死锁提交的jdk错误


有人能告诉我发生这种情况的原因以及如何解决这个问题吗?

我看到了同样的问题,我相信我已经解决了。问题似乎是
SecureRandom.nextBytes
读取
/dev/random
。但是,如果
/dev/random
熵池中没有足够的熵,读取将被阻止。有关可能的解决方案,请参阅关于该问题、关于SecureRandom的选项以及关于将Java选项设置为使用
/dev//uradom
,而不是看似等效的
/dev/uradom

。我也看到了,但没有解决办法或原因。我可以告诉你,在我的情况下,这与DNS无关,而是我直接使用SecureRandom。