Come possiamo gestire più istanze di un metodo attraverso una singola istanza di classe

2

Come possiamo gestire più istanze di un metodo attraverso una singola istanza di classe (chiamata Costruttore singolo)?

Per elaborare, ho una classe handler che ha due metodi per dire verifyUser(String JSON) e getUserInfo(String JSON) . Supponendo che ci siano molti utenti che accedono a questi metodi, ci saranno più istanze di questi metodi. La classe del gestore deve essere inizializzata una volta. Cioè non sono consentiti più oggetti di questa classe, piuttosto sono consentite più istanze di metodo.

Quale sarà la soluzione ideale per abilitare chiamate a metodi concorrenti senza corrompere i dati durante l'esecuzione?

    
posta Suban Jacob 10.08.2012 - 09:31
fonte

2 risposte

10

In Java, i metodi non hanno istanze. La terminologia corretta è che ci saranno più thread che eseguono metodi sullo stesso oggetto.

Ci sono fondamentalmente tre modi per farlo senza rischiare il danneggiamento dei dati:

  • Non condividere dati mutabili tra i thread, cioè non avere campi mutabili nella classe.
  • Proteggi tutti i dati condivisi mutabili utilizzando la sincronizzazione in modo che solo un thread in un il tempo può accedervi.
  • Utilizza algoritmi o strutture di dati speciali senza blocco, come quelli trovati nel pacchetto java.util.concurrent.

In ogni caso, farlo correttamente è difficile in tutti i casi tranne i più banali. Hai davvero bisogno di capire cosa può andare storto per evitarlo. Java Concurrency in Practice è un libro eccellente che potresti utilizzare per raggiungere tale comprensione.

    
risposta data 10.08.2012 - 09:40
fonte
0

Se non si creano variabili membro in questa classe che potrebbero essere modificate con questi metodi, si dovrebbe essere sicuri. Ma in questo caso puoi anche considerare di dichiarare questi metodi come statici.

    
risposta data 10.08.2012 - 09:42
fonte

Leggi altre domande sui tag