/ / i file delle proprietà Java sono thread safe? - java, multithreading, proprietà, sicurezza del thread

i thread delle proprietà Java sono sicuri? - java, multithreading, proprietà, sicurezza del thread

C'è un'applicazione Java che dice App1 che crea un nuovo file di registro per ogni esecuzione, il nome del file di registro viene impostato dinamicamente in fase di esecuzione configurando il file log4j.properties.

Il jar di questa applicazione java (App1) è usato daun'altra applicazione App2 che utilizza il multithreading. Ogni thread in App2 avrà anche la propria istanza del file log4j.properties, sarà logico modificare log4j.properties in fase di esecuzione?

scusa non ho potuto trovare un titolo migliore per la mia domanda, per favore modifica se pensi di qualcosa di meglio

risposte:

0 per risposta № 1

Quando dici "la sua stessa istanza", questo non è chiaro.

Per me, la tua App2, dovrebbe analizzare i tuoi log4j.properties in fase di avvio e quindi utilizzare gli stessi parametri per tutti i thread, quindi è possibile modificare log4j.properties durante il runtime.

Se vuoi essere in grado di cambiare log4j.Proprietà in fase di esecuzione e vedere le modifiche in fase di esecuzione, App2 dovrebbe ri-analizzare il file ogni volta che viene utilizzato, vale a dire. ogni volta che si avvia una discussione per chiamare App1. Qui, ogni thread avrebbe la sua versione di log4j.properties.

Questo lo rende poco sicuro? Non credo, poiché questo è il comportamento previsto e non c'è alcun rischio che un thread abbia una copia "errata" di log4j.properties poiché si trova quando si salva il file log4j.properties sul disco che il successivo quando avvii una discussione (App2), otterrà questa nuova versione. Ma se si salva il file "allo stesso tempo" all'avvio di un thread, il thread potrebbe ottenere la versione precedente poiché il file potrebbe non essere stato ancora scritto sul disco.


0 per risposta № 2

log4j.properties viene in genere letto solo una volta durante l'inizializzazione di Log4j. A meno che non si ripristini la configurazione e che Log4j rileggi il file, qualsiasi modifica dopo il lancio verrà ignorata.

Se vuoi essere assolutamente certo, condividi il tuo codice di inizializzazione / configurazione Log4j qui per noi.


0 per risposta № 3

No, non è thread-safe. Log4J non si comporta come un mutex, quindi se si accede a un'altra app (App2) che sta creando oggetti di (App1) in più thread. non puoi avere la sicurezza del thread qui.


0 per risposta № 4

Per la tua APP2 carica log4j di APP1 una sola volta all'avvio di APP2 e lascia che ogni thread di App2 acceda alla stessa copia in ordine sincronizzato altrimenti non sarà thread-safe.