< prev index next >

test/jdk/jdk/internal/misc/TerminatingThreadLocal/TestTerminatingThreadLocal.java

Print this page

123             protected void threadTerminated(T value) {
124                 terminatedValues.add(value);
125             }
126 
127             @Override
128             protected T initialValue() {
129                 return initialValue;
130             }
131         };
132 
133         Thread carrier;
134 
135         // use a single worker thread pool for the cheduler
136         try (var pool = Executors.newSingleThreadExecutor()) {
137 
138             // capture carrier Thread
139             carrier = pool.submit(Thread::currentThread).get();
140 
141             ThreadFactory factory = virtualThreadBuilder(pool)
142                     .name("ttl-test-virtual-", 0)
143                     .allowSetThreadLocals(false)
144                     .factory();
145             try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
146                 executor.submit(() -> ttlOps.accept(ttl)).get();
147             }
148 
149             assertTrue(terminatedValues.isEmpty(),
150                        "Unexpected terminated values after virtual thread terminated");
151         }
152 
153         // wait for carrier to terminate
154         carrier.join();
155 
156         assertEquals(terminatedValues, expectedTerminatedValues);
157     }
158 
159     /**
160      * Returns a builder to create virtual threads that use the given scheduler.
161      */
162     static Thread.Builder.OfVirtual virtualThreadBuilder(Executor scheduler) {
163         try {

123             protected void threadTerminated(T value) {
124                 terminatedValues.add(value);
125             }
126 
127             @Override
128             protected T initialValue() {
129                 return initialValue;
130             }
131         };
132 
133         Thread carrier;
134 
135         // use a single worker thread pool for the cheduler
136         try (var pool = Executors.newSingleThreadExecutor()) {
137 
138             // capture carrier Thread
139             carrier = pool.submit(Thread::currentThread).get();
140 
141             ThreadFactory factory = virtualThreadBuilder(pool)
142                     .name("ttl-test-virtual-", 0)

143                     .factory();
144             try (var executor = Executors.newThreadPerTaskExecutor(factory)) {
145                 executor.submit(() -> ttlOps.accept(ttl)).get();
146             }
147 
148             assertTrue(terminatedValues.isEmpty(),
149                        "Unexpected terminated values after virtual thread terminated");
150         }
151 
152         // wait for carrier to terminate
153         carrier.join();
154 
155         assertEquals(terminatedValues, expectedTerminatedValues);
156     }
157 
158     /**
159      * Returns a builder to create virtual threads that use the given scheduler.
160      */
161     static Thread.Builder.OfVirtual virtualThreadBuilder(Executor scheduler) {
162         try {
< prev index next >