2012-02-09 16 views
8

Ho ricevuto queste domande in un'intervista.Java: domande sul metodo clone

  1. abbiamo bisogno di prendersi cura di metodo clone in un ambiente concorrente? Possiamo sincronizzare il metodo clone?

  2. Ha senso utilizzare il metodo clone nelle classi Singleton?

non ho avuto risposte convincenti per questo durante l'intervista.

+13

Non preoccuparti. Queste sono domande orribili per le interviste, quindi probabilmente non volevi lavorare lì comunque. – corsiKa

+0

Sai cosa significa singleton? –

+1

Dove si trova? Posso lavorare lì? –

risposta

1
  1. Se si sta clonando un oggetto che è soggetta a modifiche in altri thread, allora si avrà probabilmente bisogno di acquisire una sorta di [leggi] bloccare proprio come se si stesse facendo qualsiasi altra operazione su di esso. Teoricamente, avresti bisogno di un blocco sul nuovo oggetto se potesse essere soggetto a pubblicazioni non sicure (ti suggerisco di non pubblicare oggetti mutabili in modo infondato!).

  2. Non sarebbe un singleton se si potesse fare un altro esempio di esso (c'è l'antipattern monostatico che è come l'antipattern singolo, solo peggio e può coinvolgere più oggetti senza uno scopo chiaro). Immagino che se tu fossi sottoclasse di una classe che ha implementato Cloneable tu voglia ignorare clone e lanciare CloneNotSupportedException è possibile o altrimenti restituire this.

2
  1. Probabilmente sì 99,99% dei tempi ma basta pensare al clone come tutti gli altri metodi della classe e la sincronizzazione, se necessario, a seconda del contesto specifico. Non c'è niente di sbagliato nella sincronizzazione di un metodo che non è sincronizzato nella sua classe Base. D'altra parte, non la sincronizzazione di un metodo durante l'override uno sincronizzato è probabilmente un errore anche se il codice compila bene e sono emessi nessun avviso ...

  2. Una risposta convincente sarebbe probabilmente NO con un paio di parole sul modello di design singleton.