Jakie operacje w Javie są uważane za atomowe?Jakie operacje w Javie są uważane za atomowe?
Odpowiedz
- wszystkie zadania prymitywnych typów z wyjątkiem długich i podwójnych
- wszystkich zadań odniesień
- wszystkie przypisania zmiennych lotnych
- wszystkie operacje java.concurrent.Atomic * klas
i może coś więcej. Spójrz na jls.
Jak zaznaczono w komentarzach, atomowość nie oznacza widoczności. Tak więc, podczas gdy inny wątek jest gwarantowany, aby nie widzieć częściowo zapisanego int
, może nigdy nie zobaczyć nowej wartości.
Operacje na długich i podwójnych są na wspólnych 64-bitowych procesorach atomic as well, chociaż nie ma żadnej gwarancji. Zobacz także ten feature request.
W języku Java odczyt i zapis 32-bitowych lub mniejszych wielkości gwarantują atomową.
Według atomów mamy na myśli, że każda akcja ma miejsce w jednym kroku i nie można jej przerwać. Tak więc, gdy mamy aplikacje wielowątkowe, operacje odczytu i zapisu są wątkowo bezpieczne i nie muszą być synchronizowane.
Na przykład następujący kod jest wątek bezpieczne:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
..threadsafe w tym sensie, że wartość zawsze będzie dokładnie taka sama jak pierwotna wartość lub ustawiona wartość. Większość aktualnych wartości wciąż nie jest widoczna dla innych wątków z powodu braku "niestabilności" lub "zsynchronizowania". –
+1 do tego, co mówi @MikkoWilkman. Ten fragment kodu nie powinien być używany, ponieważ z pewnością nie jest wątkiem bezpiecznym z perspektywy widoczności pamięci. –
Byłoby wydają że cesje tęskni są niepodzielne, na podstawie tej metody w AtomicLong.java:
public final void set(long newValue) {
value = newValue;
}
Note brak jakiejkolwiek synchronizacji.
Spójrz na deklarację "wartości". To 'volatile'. – maaartinus
Ta "wartość" jest "lotna", nie czyni przypisania "wartości" atomową, po prostu unika problemów "publikowania". –
Wykonuje oba, patrz [JLS, sekcja 17.7] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7): Zapisuje i odczytuje lotny długi a podwójne wartości są zawsze atomowe. – maaartinus
- 1. Jakie operacje są operacje atomowe
- 2. Jakie funkcje są uważane za zaawansowane python?
- 3. Operacje atomowe w C++
- 4. Operacje atomowe dla shared_ptr w C++ 11
- 5. Operacje atomowe C++ dla struktur bez blokady
- 6. Jak uzyskać operacje atomowe (model współbieżności) w JavaScript?
- 7. Jakie są trywialne operacje w std :: is_trivially_copy_constructible w C++
- 8. Jakie są różne techniki zapamiętywania w Javie?
- 9. Listy są takie same, ale nie są uważane za równe?
- 10. Jakie operacje unieważnią więzy?
- 11. Czy komentarze C++ są uważane za zły styl w C?
- 12. Jakie operacje wstępnego przetwarzania są wykonywane przez Tesseract OCR?
- 13. Jakie operacje dopuszcza zakres bigquery.readonly?
- 14. Dlaczego subrasy mercurial są uważane za cechę ostatniej instancji
- 15. Czy kody statusu HTTP są uważane za "magiczne liczby"?
- 16. Czy drzewa decyzyjne (np. C4.5) są uważane za uczenie nieparametryczne?
- 17. Jakie są odpowiednie i nieodpowiednie zastosowania refleksji w Javie?
- 18. Jakie są różne sposoby, w jakie "to" może uciec w Javie?
- 19. Czy operacje rsync są atomiczne na poziomie pliku?
- 20. Gdzie w ścieżce projektu maven powinienem umieścić pliki konfiguracyjne, które nie są uważane za zasoby
- 21. Jak wykonywać różne operacje w ramach aktualizacji Observer() w Javie?
- 22. Tablice są reifikowane w Javie
- 23. Czy operacje atomowe stają się wolniejsze, gdy dodaje się więcej procesorów?
- 24. Czy Ruby ma zmienne atomowe?
- 25. Operacje walutowe za pomocą javaScript?
- 26. Czy + =, | =, & = itd. Atomowe?
- 27. Czy jest to uważane za SFINAE?
- 28. Czy wszystkie nagłówki w/usr/include są uważane za publiczne API w MAS?
- 29. Jakie są praktyczne zastosowania XOR w algorytmach
- 30. Jakie są zalety VistaDB
Przypisania do 'volatile' longs i doubles gwarantują atomową: http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7 –
Pamiętaj również, że podczas operacje są atomowe, widoczność tych operacji może nie być zagwarantowana w aplikacji wielowątkowej, chyba że zostanie podjęta szczególna troska (szczegóły tutaj są * droga * do zawiłości opisania w komentarzu). – nos
64-bitowe jvm, długie i podwójne przypisania są również atomowe. –