public Object pop()
    {
        Object x;
        if(Thread.interrupted())
            return null;
        x = extract();
        if(x != null)
        {
            size--;
            return x;
        }
        Object obj = putLock;
        JVM INSTR monitorenter ;
        waitingForTake++;
_L1:
        x = extract();
        if(x == null)
            break MISSING_BLOCK_LABEL_79;
        waitingForTake--;
        size--;
        return x;
        putLock.wait();
          goto _L1
        InterruptedException ex;
        ex;
        waitingForTake--;
        putLock.notify();
        null;
        obj;
        JVM INSTR monitorexit ;
        return;
        Exception exception;
        exception;
        throw exception;
    }源代码应该怎么写呢?麻烦各位帮帮忙,谢谢。

解决方案 »

  1.   

    反编译后的缺少了一些需要的信息。尤其是那个break MISSING_BLOCK_LABEL_79 到底跳转到什么位置不知道。只能大至给你翻译一下了。要想得到100%准确地翻译,用javap-c 把jvm指令打印出来,或者把class文件给我。[email protected]    public Object pop()
            {
                if(Thread.interrupted())
                    return null;
                Object x = extract();
                if(x != null)
                {
                    size--;
                    return x;
                }
                synchronized(putLock)
                {
                    waitingForTake++;
                    for(;;)
                    {
                        x = extract();
                        if (x !=null)
                        {
                            waitingForTake--;
                            size--;
                            return x;
                        }
                        try
                        {
                            putLock.wait();
                        }
                        catch(InterrupedException ex)
                        {
                            waitingForTak--;
                            putLock.notify();
                            return null;
                        }
                    }
                }
            }