java CountDownLatch報錯java.lang.IllegalMonitorStateException: null


筆者使用websocket進行通信,服務器異步返回。websocket服務器又異步調用其他websocket,也是異步訪問。

由於無法預測服務器調用第三方websocket什么時候調用結束,使用了CountDownLatch。

每次報錯都如下:

java.lang.reflect.InvocationTargetException: null
    at sun.reflect.GeneratedMethodAccessor419.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.yeauty.pojo.PojoEndpointServer.doOnMessage(PojoEndpointServer.java:180)
    at org.yeauty.standard.WebSocketServerHandler.handleWebSocketFrame(WebSocketServerHandler.java:39)
    at org.yeauty.standard.WebSocketServerHandler.channelRead0(WebSocketServerHandler.java:19)
    at org.yeauty.standard.WebSocketServerHandler.channelRead0(WebSocketServerHandler.java:9)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalMonitorStateException: null
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at com.xxx.web.open.ws.RealTimeTTSEndpoint.onSendEOS(RealTimeTTSEndpoint.java:142)
    at com.xxx.web.open.ws.RealTimeTTSEndpoint.onMessage(RealTimeTTSEndpoint.java:103)
    ... 28 common frames omitted

后來查代碼看看,是

CountDownLatch.await()方法手誤寫成CountDownLatch.wait()
注意await與wait一字之差。
錯誤:
connectClose.wait();

正確:

connectClose.await();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM