Moje pytanie dotyczy tego, czy korzystanie z ReentrantLock gwarantuje widoczność pola z takim samym szacunkiem, jakie zapewnia zsynchronizowane słowo kluczowe.Czy zmienne słowo kluczowe jest wymagane w polach dostępnych za pośrednictwem ReentrantLock?
Na przykład w poniższej klasie , pola shareddata nie muszą być deklarowane jako lotny zsynchronizowane parametr jest używany.
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
Dla następnego przykładu użycie ReentrantLock jest jednak zmiennym słowem kluczowym na polu?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
wiem, że za pomocą słowa kluczowego lotnych i tak będzie prawdopodobnie tylko nałożyć malutkie spadek wydajności, ale nadal chce zakodować poprawnie.
Czy ta rada jest prawdziwa w odniesieniu do 'while (field)' ze względu na podnoszenie pola? – Pod
@Pod: Bez szczegółowych informacji o tym, jak pętla 'while' wchodzi w interakcje z blokadą, nie można powiedzieć. Prawdopodobnie chcesz utworzyć nowe pytanie z konkretnym przykładem. –