मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं जावा 8 समानांतर स्ट्रीम में थ्रेडलोकल मान कैसे कॉपी कर सकता हूं।जावा 8 समांतर स्ट्रीम और थ्रेडलोकल
हम इस पर विचार तो अगर यह:
public class ThreadLocalTest {
public static void main(String[] args) {
ThreadContext.set("MAIN");
System.out.printf("Main Thread: %s\n", ThreadContext.get());
IntStream.range(0,8).boxed().parallel().forEach(n -> {
System.out.printf("Parallel Consumer - %d: %s\n", n, ThreadContext.get());
});
}
private static class ThreadContext {
private static ThreadLocal<String> val = ThreadLocal.withInitial(() -> "empty");
public ThreadContext() {
}
public static String get() {
return val.get();
}
public static void set(String x) {
ThreadContext.val.set(x);
}
}
}
कौन सा
Main Thread: MAIN
Parallel Consumer - 5: MAIN
Parallel Consumer - 4: MAIN
Parallel Consumer - 7: empty
Parallel Consumer - 3: empty
Parallel Consumer - 1: empty
Parallel Consumer - 6: empty
Parallel Consumer - 2: empty
Parallel Consumer - 0: MAIN
आउटपुट वहाँ मुझे धागे जो प्रत्येक समानांतर के लिए उत्पन्न हुए हैं में main() प्रणाली से ThreadLocal क्लोन करने के लिए एक रास्ता है निष्पादन?
इस तरह इतना है कि मेरी परिणाम है:
Main Thread: MAIN
Parallel Consumer - 5: MAIN
Parallel Consumer - 4: MAIN
Parallel Consumer - 7: MAIN
Parallel Consumer - 3: MAIN
Parallel Consumer - 1: MAIN
Parallel Consumer - 6: MAIN
Parallel Consumer - 2: MAIN
Parallel Consumer - 0: MAIN
बजाय पहले एक की
?
मुझे उम्मीद नहीं होगी। लेकिन यह पहली जगह में केवल 'थ्रेडलोकल' क्यों है, बस अपनी मुख्य विधि में बनाए गए और फिर स्पष्ट रूप से लैम्ब्डा को पारित किया गया? –
क्या आप धाराओं को पार करने की कोशिश कर रहे हैं? मैंने सुना है कि यह बुरा होगा। – zapl