'volátil' na assinatura do método? [duplicado]

Esta questão já tem uma resposta aqui:

Por que tornar um método volátil em java? 7 respostas

Este é estranho. Eu tenho o seguinte código:

<code>class A
{   
    protected A clone() throws CloneNotSupportedException
    {
        return (A) super.clone();       
    }
}
</code>

quando eu descompilhei seu bytecode através de 'showmycode.com', ele me mostrou o seguinte código:

<code>class A
{

    A()
    {
    }

    protected A clone()
    throws clonenotsupportedexception
    {
        return (A)super.clone();
    }

    protected volatile object clone()
    throws clonenotsupportedexception
    {
        return clone();
    }
}
</code>

O que significa para um tipo de retorno de método ser volátil no segundo método 'clone'? (Este código foi compilado através do compilador JDK 1.6 padrão do Eclipse).

questionAnswers(4)

yourAnswerToTheQuestion