/ / È il mio metodo di utilizzo statico thread safe - java, multithreading

Il mio metodo di utilizzo statico è sicuro: java, multithreading

Ho una classe Util con metodi di utilità come:

public static String formatAmount(String amount) throws Exception {
return String.format("%,.2f", Double.valueOf(amount));
}

Questo metodo è sicuro? Non sto modificando l'importo altrove.

In secondo luogo, ho un altro metodo come

private boolean checkIfDateIsAHoliday(org.joda.time.LocalDate date) {
boolean isHoliday = false;
.......
return isHoliday;
}

Questo metodo è sicuro? Non sto modificando la data in nessun'altra parte.

risposte:

1 per risposta № 1

La sicurezza del thread riguarda l'accesso allo stato condiviso. Quindi, se vuoi sapere se un metodo è thread-safe, devi solo verificare se accede allo stato (= campi) a cui è possibile accedere anche da altri thread:

  • Se non esiste uno stato del genere, hai finito - il metodo è thread-safe.
  • Se ci è tale stato, è necessario verificare se è accessibile in modo thread-safe.

(Guarda anche http://tutorials.jenkov.com/java-concurrency/thread-safety.html)

Il tuo primo metodo non accede a nessuno stato condiviso (String è immutabile, quindi il parametro è thread-safe di per sé). Chiama due metodi statici (String.format e Double.valueOf) che potrebbe accedere allo stato condiviso. Sfortunatamente, javadoc non dice nulla riguardo alla sicurezza del thread di questi due metodi. Tuttavia possiamo supporre che lo siano (altrimenti quasi tutte le applicazioni java erano rotte).

Il tuo secondo metodo è thread-safe per quanto riguarda il codice che possiamo vedere (non possiamo discutere sul codice che sta dietro .....). Motivo: stai solo modificando lo stato locale (variabile stack isHoliday). Poiché lo stato locale non è accessibile da altri thread, questo è thread-safe per definizione.

Ora prova a discutere sul resto del codice (.....)!


5 per risposta № 2

Come sempre, l'inferno è nei piccoli dettagli. Il tuo primo metodo è thread-safe perché sicuramente non cambia stato di alcuna classe.

Il tuo metodo secondi è disponibile solo parzialmente. Non so cosa sia scritto nel tuo codice anziché ........ Se non si modifica lo stato di qualsiasi classe, il metodo è sicuro per i thread, altrimenti non lo è.


0 per risposta № 3

Per il primo metodo sarà Filo sicuro Ma Non sarà sicuro per il metodo che hai dichiarato nel secondo


0 per risposta № 4

Il primo è thread-safe perché stai leggendo solo una variabile immutabile String.

Joda "s LocalDate è anche immutabile. Pertanto, supponendo che non si stia leggendo o scrivendo campi di classi o istanze mutabili, questo metodo è anche protetto da thread.