Mój projekt Java AppEngine nie przechowuje żadnych stanu pomiędzy żądaniami wyjątkiem następujących zastosowań Memcache:Lista kontrolna bezpieczny wątku java na AppEngine
- zobiektywizować używa memcache do buforowania datastore dostaje
- używam memcache jako sposób na zadania czyszczenia grupowego po wielu żądaniach (np.
if (the memcache doesn't think a cleanup task is already running) schedule another cleanup task
).
mam żadnych globalnych/statyczne odniesienia do wszelkich obiektów, z wyjątkiem:
- Obecny uwierzytelniony użytkownik jest utrzymywana w
static ThreadLocal<User>
obiektu. Oznacza to, że każde żądanie otrzyma swoją własną kopię Użytkownika, prawda? - Mam klasę, która obsługuje wszystkie manipulacje danymi, a instancja jest przechowywana jako rodzaj zmiennej globalnej w obiekcie
static DataCoordinator
.
Czego potrzebuję, aby mój kod był wątkowo bezpieczny? Czy muszę wstawić słowo kluczowe synchronized
do każdej deklaracji metody w mojej implementacji DataCoordinator
, ponieważ wiele wątków może uzyskać do niej dostęp? Czy to prawda, że obiekt ThreadLocal<User>
zawsze tworzy osobny obiekt dla każdego wątku, aby każde żądanie było uwierzytelniane osobno?
Jestem totalną nowicjuszką w myśleniu wątkowym. Co powinienem przeczytać?
Dzięki za pomoc i przepraszam za brak specyfiki.
Czy masz jakieś zajęcia singlton, gdzie można zawsze odwołać się do tej samej instancji poprzez .getInstance()? Jeśli tak, to wiele równoległych żądań wykonywanych w różnych wątkach w tej samej maszynie wirtualnej/instancji może być uzyskiwanie odwołania do tego samego obiektu .... i następnie klasy w ich użyciu lub modyfikacji zmiennych instancji. –