2015-06-24 9 views
32

W .net istnieje "uber", czyli wątkowy magazyn lokalny (TLS), który umożliwia dowolne "przeskakiwanie" dowolnych danych TLS z jednego wątku do drugiego . Opiera się na CallContext class.Co to jest odpowiednik języka Java w języku C# "Kontekst połączenia logicznego"

Innymi słowy, logiczne żądanie może utworzyć hierarchię nowych wątków - i każdy z tych wątków będzie miał dostęp do tego samego TLS oryginalnego wątku. Jest to bardzo ważna funkcja, szczególnie w przypadku rejestrowania, autoryzacji, wielokrotnego wynajmu lub problemów związanych z brandingiem.

Co to jest odpowiednik w Javie?

Tylko w .net 4.5 has the "logical callcontext" gained a "copy on write" capability, która umożliwia wątkom dokonywanie prywatnych modyfikacji logicznego wywołania połączenia. Innymi słowy, .net wciąż dojrzewa tę zdolność i zapewnia większą stabilność.

Jeśli Java ma równoważne pojęcie, jak jest stabilny? Jakie to ma problemy?

Wyjaśnienie

już wiem, że Java ma pamięć lokalna wątku (TLS) zdolności. To nie jest pytanie. Pytam, czy Java ma odpowiednik "logicznego kontekstu wywołania" .NET, który jest znacznie potężniejszą konstrukcją niż prosty TLS.

+0

Interesujące pytanie. Niestety, myślę, że nie masz szczęścia.Zgodnie z moją wiedzą nie ma takiej funkcji w Javie. Byłbym szczęśliwy, gdyby mnie poprawiono i uczyłem się czegoś nowego. –

+0

Po prostu pytanie do wyjaśnienia - jeśli "oryginalny wątek" w twoim przykładzie zmienia dane TLS, czy wątki podrzędne widzą zaktualizowaną wartość? Np. Wątek podrzędny, aby nie tylko uzyskać kopię, mają podgląd na żywo nadrzędnego TLS? –

+1

Nie ma oficjalnej asynchronicznej obsługi w JDK. Nie jest jednak trudno tworzyć własne (bez składni na poziomie języka). Na przykład moje [Fibre i FibreLocal] (http://bayou.io/release/0.9/docs/async/Async_Programming.html#Fiber) – ZhongYu

Odpowiedz

15

Może InheritableThreadLocal jest tym, czego szukasz?

Nie jestem pewien, czy to jest dokładnie to samo, ale o ile mi zrozumieć, że spełnia ten wymóg:

logiczny wniosek może tarła hierarchię nowych wątków - a każdy z tych wątków będzie miała dostęp do tego samego TLS oryginalnego wątku.

Od docs

Ta klasa rozszerza ThreadLocal zapewnić dziedziczenie wartości z nici macierzystej w wątku dzieckiem: gdy wątek dziecko jest tworzony, dziecko otrzymuje początkowe wartości wszystkich zmiennych dziedziczne wątku lokalnego dla których rodzic ma wartości. Zwykle wartości dziecka będą identyczne z wartościami dla rodzica; jednak wartość dziecka może być dowolną funkcją rodzica przez przesłanianie metody childValue w tej klasie. gwint dziedzicznych zmienne lokalne są używane zamiast zwykłymi zmiennych nitki lokalnym, gdy za gwintem atrybut utrzymywano w zmiennej (na przykład identyfikator użytkownika, identyfikator transakcji) musi być automatycznie przenoszone do wszystkich wątków podrzędnych, które są tworzone.

nie wiem o „copy on write” zdolności pan wspomniał, ale myślę, że można zastąpić InheritableThreadLocal.childValue(T) do pełnomocnika wartość rodzica tak, że pisze nie przechodzą do rodzica i zmodyfikować obecny wątku lokalne przechowywanie

Powiązane problemy