Java 可运行线程卡在对象中。notify()

Java 可运行线程卡在对象中。notify(),java,thread-synchronization,Java,Thread Synchronization,用Java编写的网络客户端应用程序的套接字读取线程陷入可运行状态,堆栈跟踪指向Object.notufy(): “套接字侦听器”守护程序prio=10 tid=0x00007f6ba98b6000 nid=0x5bfb runnable[0x000000004c1e9000] java.lang.Thread.State:可运行 位于java.lang.Object.notify(本机方法) 在com.yyy.ClientConnectionImpl$BulkReadOperation.Cons

用Java编写的网络客户端应用程序的套接字读取线程陷入可运行状态,堆栈跟踪指向
Object.notufy()

“套接字侦听器”守护程序prio=10 tid=0x00007f6ba98b6000 nid=0x5bfb runnable[0x000000004c1e9000]
java.lang.Thread.State:可运行
位于java.lang.Object.notify(本机方法)
在com.yyy.ClientConnectionImpl$BulkReadOperation.ConsumerBuffer(ClientConnectionImpl.java:1306)
-已锁定(com.yyy.ClientConnectionImpl$BulkReadOperation)
运行(MessageReceiver.java:627)
位于java.lang.Thread.run(未知源)
锁定可拥有的同步器:
-没有
每次打印时都会显示相同的堆栈跟踪。 相关代码如下所示:

public void consumeBuffer (ByteBuffer buffer)
{
    if (buffer.remaining() == 0) {
        synchronized (this) {
            finished = true;
            notify ();   <<----- line 1306
        }
    }
}
公共缓冲区(ByteBuffer缓冲区)
{
if(buffer.remaining()==0){
已同步(此){
完成=正确;

notify();这应该是不可能的。可能您的代码处于一个无限循环中,该循环反复调用
consumeBuffer
,线程堆栈跟踪正好显示notify()因为它是一种稍微昂贵的方法,因此比周围的代码更可能是快照点?这不可能。也许您的代码处于一个无限循环中,该循环反复调用
consumeBuffer
,线程堆栈跟踪恰好显示notify()因为它是一种稍微昂贵的方法,因此比周围的代码更可能是快照点?
public void consumeBuffer (ByteBuffer buffer)
{
    if (buffer.remaining() == 0) {
        synchronized (this) {
            finished = true;
            notify ();   <<----- line 1306
        }
    }
}