Secondo la specifica del linguaggio Java , i costruttori non possono essere contrassegnati come sincronizzati perché altri thread non possono vedere l’object che si sta creando finché il thread che lo ha creato non lo ha completato. Questo sembra un po ‘strano, perché posso effettivamente avere un altro thread per visualizzare l’object mentre è in […]
Sono confuso nel metodo join() usato in Threads in Java. Nel seguente codice: // Using join() to wait for threads to finish. class NewThread implements Runnable { String name; // name of thread Thread t; NewThread(String threadname) { name = threadname; t = new Thread(this, name); System.out.println(“New thread: ” + t); t.start(); // Start the […]
questo è un passaggio da JavaDoc per ConcurrentHashMap . Dice che le operazioni di recupero generalmente non si bloccano, quindi potrebbero sovrapporsi alle operazioni di aggiornamento. Questo significa che il metodo get() non è thread-safe? “Tuttavia, anche se tutte le operazioni sono thread-safe, le operazioni di recupero non comportano il blocco e non c’è alcun […]
private double value; public synchronized void setValue(double value) { this.value = value; } public double getValue() { return this.value; } Nell’esempio sopra c’è qualche punto nel rendere il getter sincronizzato?
Conosco la differenza tra il metodo sincronizzato e il blocco sincronizzato, ma non sono sicuro della parte del blocco sincronizzata. Supponendo che io abbia questo codice class Test { private int x=0; private Object lockObject = new Object(); public void incBlock() { synchronized(lockObject) { x++; } System.out.println(“x=”+x); } public void incThis() { // same as […]
In Java, il modo idiomatico per dichiarare sezioni critiche nel codice è il seguente: private void doSomething() { // thread-safe code synchronized(this) { // thread-unsafe code } // thread-safe code } Quasi tutti i blocchi si sincronizzano su this , ma c’è una ragione particolare per questo? Ci sono altre possibilità? Esistono best practice su […]
Sono ancora piuttosto nuovo al concetto di threading e cerco di capirne di più. Recentemente, mi sono imbattuto in un post sul blog What Volatile Means in Java di Jeremy Manson, in cui scrive: Quando un thread scrive su una variabile volatile e un altro thread vede quella scrittura, il primo thread indica il secondo […]
Un avviso viene visualizzato ogni volta che si sincronizza su un campo di class non finale. Ecco il codice: public class X { private Object o; public void setO(Object o) { this.o = o; } public void x() { synchronized (o) // synchronization on a non-final field { } } } così ho cambiato la […]
Mi chiedo quale sia la differenza tra dichiarare una variabile come volatile e accedere sempre alla variabile in un blocco synchronized(this) in Java? Secondo questo articolo http://www.javamex.com/tutorials/synchronization_volatile.shtml c’è molto da dire e ci sono molte differenze ma anche alcune somiglianze. Sono particolarmente interessato a questa informazione: … l’accesso a una variabile volatile non ha mai […]
Qualcuno può dirmi il vantaggio del metodo sincronizzato sul blocco sincronizzato con un esempio?