Prestazioni di condivisione di singoli oggetti con più thread in Java

2

In Java, se creo un oggetto che ha un metodo per fare qualcosa, e passo quell'oggetto a più thread che chiamano il metodo, c'è una differenza di prestazioni dalla creazione di una singola istanza di quella classe in ogni thread?

In altre parole, causa un collo di bottiglia per migliaia di thread che tentano di accedere agli stessi metodi dell'oggetto allo stesso tempo?

Non ne so un sacco sulla memoria o su come funziona un processore, ma mi sembra che l'opzione oggetto singolo abbia una singola istanza in memoria e migliaia di thread potrebbero tentare di utilizzare quel codice contemporaneamente. Con un processore single core, questo potrebbe essere irrilevante dal momento che il processore può fare solo una cosa. Ma in una configurazione multi-core, più thread possono utilizzare contemporaneamente il codice di un singolo oggetto in memoria?

    
posta Joe 08.08.2015 - 05:55
fonte

1 risposta

1

Dipende.

Senza alcuna sincronizzazione e senza variabili volatili o atomiche non fa differenza.

Tuttavia, se quei metodi modificano lo stato dell'oggetto avrai bisogno di qualche forma di sincronizzazione, altrimenti più thread sovrascriveranno le modifiche da altri thread o semplicemente non vedranno la modifica . La sincronizzazione non è libera, le variabili volatili e l'atomica non sono libere, quindi se ne usi una, fa la differenza, sì.

    
risposta data 08.08.2015 - 06:05
fonte

Leggi altre domande sui tag